pgprot_t set_remote_cache_cpu(pgprot_t prot, int cpu) { unsigned int width = smp_width; int x = cpu % width; int y = cpu / width; BUG_ON(y >= smp_height); BUG_ON(hv_pte_get_mode(prot) != HV_PTE_MODE_CACHE_TILE_L3); BUG_ON(cpu < 0 || cpu >= NR_CPUS); BUG_ON(!cpu_is_valid_lotar(cpu)); return hv_pte_set_lotar(prot, HV_XY_TO_LOTAR(x, y)); }
static ssize_t hv_stats_store(struct device *dev, struct device_attribute *attr, const char *page, size_t count) { int cpu = dev->id; long lotar = HV_XY_TO_LOTAR(cpu_x(cpu), cpu_y(cpu)); ssize_t n = hv_confstr(HV_CONFSTR_HV_STATS, 0, 0, lotar, 1); return n < 0 ? n : count; }
static ssize_t hv_stats_show(struct device *dev, struct device_attribute *attr, char *page) { int cpu = dev->id; long lotar = HV_XY_TO_LOTAR(cpu_x(cpu), cpu_y(cpu)); ssize_t n = hv_confstr(HV_CONFSTR_HV_STATS, (unsigned long)page, PAGE_SIZE - 1, lotar, 0); n = n < 0 ? 0 : min(n, (ssize_t)PAGE_SIZE - 1); page[n] = '\0'; return n; }
static int __init create_sysfs_entries(void) { int err = 0; #define create_cpu_attr(name) \ if (!err) \ err = device_create_file(cpu_subsys.dev_root, &dev_attr_##name); create_cpu_attr(chip_width); create_cpu_attr(chip_height); create_cpu_attr(chip_serial); create_cpu_attr(chip_revision); #define create_hv_attr(name) \ if (!err) \ err = sysfs_create_file(hypervisor_kobj, &dev_attr_##name.attr); create_hv_attr(type); create_hv_attr(version); create_hv_attr(config_version); if (!err) err = sysfs_create_group(hypervisor_kobj, &board_attr_group); if (!err) { sysfs_bin_attr_init(&hvconfig_bin); hvconfig_bin.attr.name = "hvconfig"; hvconfig_bin.attr.mode = S_IRUGO; hvconfig_bin.read = hvconfig_bin_read; hvconfig_bin.size = PAGE_SIZE; err = sysfs_create_bin_file(hypervisor_kobj, &hvconfig_bin); } if (!err) { /* * Don't bother adding the hv_stats files on each CPU if * our hypervisor doesn't supply statistics. */ int cpu = raw_smp_processor_id(); long lotar = HV_XY_TO_LOTAR(cpu_x(cpu), cpu_y(cpu)); char dummy; ssize_t n = hv_confstr(HV_CONFSTR_HV_STATS, (unsigned long) &dummy, 1, lotar, 0); if (n >= 0) err = subsys_interface_register(&hv_stats_interface); } return err; }