/* * Reading/parsing the default pmu type value, which should be * located at: * /sys/bus/event_source/devices/<dev>/type as sysfs attribute. */ static int pmu_type(char *name, __u32 *type) { struct stat st; char path[PATH_MAX]; const char *sysfs; FILE *file; int ret = 0; sysfs = sysfs_find_mountpoint(); if (!sysfs) return -1; snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/type", sysfs, name); if (stat(path, &st) < 0) return -1; file = fopen(path, "r"); if (!file) return -EINVAL; if (1 != fscanf(file, "%u", type)) ret = -1; fclose(file); return ret; }
int cpu_map__get_socket(struct cpu_map *map, int idx) { FILE *fp; const char *mnt; char path[PATH_MAX]; int cpu, ret; if (idx > map->nr) return -1; cpu = map->map[idx]; mnt = sysfs_find_mountpoint(); if (!mnt) return -1; sprintf(path, "%s/devices/system/cpu/cpu%d/topology/physical_package_id", mnt, cpu); fp = fopen(path, "r"); if (!fp) return -1; ret = fscanf(fp, "%d", &cpu); fclose(fp); return ret == 1 ? cpu : -1; }
/* * Reading/parsing the default pmu format definition, which should be * located at: * /sys/bus/event_source/devices/<dev>/format as sysfs group attributes. */ static int pmu_format(char *name, struct list_head *format) { struct stat st; char path[PATH_MAX]; const char *sysfs; sysfs = sysfs_find_mountpoint(); if (!sysfs) return -1; snprintf(path, PATH_MAX, "%s/bus/event_source/devices/%s/format", sysfs, name); if (stat(path, &st) < 0) return -1; if (pmu_format_parse(path, format)) return -1; return 0; }