mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-29 07:34:06 +08:00
0a7c74eae3
Andi reported a performance drop in single threaded perf tools such as 'perf script' due to the growing number of locks being put in place to allow for multithreaded tools, so wrap the POSIX threads rwlock routines with the names used for such kinds of locks in the Linux kernel and then allow for tools to ask for those locks to be used or not. I.e. a tool may have a multithreaded phase and then switch to single threaded, like the upcoming patches for the synthesizing of PERF_RECORD_{FORK,MMAP,etc} for pre-existing processes to then switch to single threaded mode in 'perf top'. The init routines will not be conditional, this way starting as single threaded to then move to multi threaded mode should be possible. Reported-by: Andi Kleen <ak@linux.intel.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: Kan Liang <kan.liang@intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Wang Nan <wangnan0@huawei.com> Link: http://lkml.kernel.org/r/20170404161739.GH12903@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
71 lines
1.8 KiB
C
71 lines
1.8 KiB
C
#ifndef GIT_COMPAT_UTIL_H
|
|
#define GIT_COMPAT_UTIL_H
|
|
|
|
#define _BSD_SOURCE 1
|
|
/* glibc 2.20 deprecates _BSD_SOURCE in favour of _DEFAULT_SOURCE */
|
|
#define _DEFAULT_SOURCE 1
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdlib.h>
|
|
#include <stdarg.h>
|
|
#include <linux/compiler.h>
|
|
#include <linux/types.h>
|
|
#include "namespaces.h"
|
|
|
|
/* General helper functions */
|
|
void usage(const char *err) __noreturn;
|
|
void die(const char *err, ...) __noreturn __printf(1, 2);
|
|
|
|
static inline void *zalloc(size_t size)
|
|
{
|
|
return calloc(1, size);
|
|
}
|
|
|
|
#define zfree(ptr) ({ free(*ptr); *ptr = NULL; })
|
|
|
|
struct dirent;
|
|
struct strlist;
|
|
|
|
int mkdir_p(char *path, mode_t mode);
|
|
int rm_rf(const char *path);
|
|
struct strlist *lsdir(const char *name, bool (*filter)(const char *, struct dirent *));
|
|
bool lsdir_no_dot_filter(const char *name, struct dirent *d);
|
|
int copyfile(const char *from, const char *to);
|
|
int copyfile_mode(const char *from, const char *to, mode_t mode);
|
|
int copyfile_ns(const char *from, const char *to, struct nsinfo *nsi);
|
|
|
|
ssize_t readn(int fd, void *buf, size_t n);
|
|
ssize_t writen(int fd, const void *buf, size_t n);
|
|
|
|
size_t hex_width(u64 v);
|
|
int hex2u64(const char *ptr, u64 *val);
|
|
|
|
extern unsigned int page_size;
|
|
extern int cacheline_size;
|
|
|
|
int fetch_kernel_version(unsigned int *puint,
|
|
char *str, size_t str_sz);
|
|
#define KVER_VERSION(x) (((x) >> 16) & 0xff)
|
|
#define KVER_PATCHLEVEL(x) (((x) >> 8) & 0xff)
|
|
#define KVER_SUBLEVEL(x) ((x) & 0xff)
|
|
#define KVER_FMT "%d.%d.%d"
|
|
#define KVER_PARAM(x) KVER_VERSION(x), KVER_PATCHLEVEL(x), KVER_SUBLEVEL(x)
|
|
|
|
const char *perf_tip(const char *dirpath);
|
|
|
|
#ifndef HAVE_SCHED_GETCPU_SUPPORT
|
|
int sched_getcpu(void);
|
|
#endif
|
|
|
|
#ifndef HAVE_SETNS_SUPPORT
|
|
int setns(int fd, int nstype);
|
|
#endif
|
|
|
|
extern bool perf_singlethreaded;
|
|
|
|
void perf_set_singlethreaded(void);
|
|
void perf_set_multithreaded(void);
|
|
|
|
#endif /* GIT_COMPAT_UTIL_H */
|