mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
x86/resctrl: make pseudo_lock_class a static const structure
Now that the driver core allows for struct class to be in read-only memory, move the pseudo_lock_class structure to be declared at build time placing it into read-only memory, instead of having to be dynamically allocated at boot time. Cc: Fenghua Yu <fenghua.yu@intel.com> Cc: Reinette Chatre <reinette.chatre@intel.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Ingo Molnar <mingo@redhat.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: x86@kernel.org Cc: "H. Peter Anvin" <hpa@zytor.com> Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Ivan Orlov <ivan.orlov0322@gmail.com> Acked-by: Reinette Chatre <reinette.chatre@intel.com> Link: https://lore.kernel.org/r/20230620144431.583290-6-gregkh@linuxfoundation.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
5b87c058bf
commit
7630ea17f4
@@ -45,7 +45,21 @@ static u64 prefetch_disable_bits;
|
|||||||
*/
|
*/
|
||||||
static unsigned int pseudo_lock_major;
|
static unsigned int pseudo_lock_major;
|
||||||
static unsigned long pseudo_lock_minor_avail = GENMASK(MINORBITS, 0);
|
static unsigned long pseudo_lock_minor_avail = GENMASK(MINORBITS, 0);
|
||||||
static struct class *pseudo_lock_class;
|
|
||||||
|
static char *pseudo_lock_devnode(const struct device *dev, umode_t *mode)
|
||||||
|
{
|
||||||
|
const struct rdtgroup *rdtgrp;
|
||||||
|
|
||||||
|
rdtgrp = dev_get_drvdata(dev);
|
||||||
|
if (mode)
|
||||||
|
*mode = 0600;
|
||||||
|
return kasprintf(GFP_KERNEL, "pseudo_lock/%s", rdtgrp->kn->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct class pseudo_lock_class = {
|
||||||
|
.name = "pseudo_lock",
|
||||||
|
.devnode = pseudo_lock_devnode,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* get_prefetch_disable_bits - prefetch disable bits of supported platforms
|
* get_prefetch_disable_bits - prefetch disable bits of supported platforms
|
||||||
@@ -1353,7 +1367,7 @@ int rdtgroup_pseudo_lock_create(struct rdtgroup *rdtgrp)
|
|||||||
&pseudo_measure_fops);
|
&pseudo_measure_fops);
|
||||||
}
|
}
|
||||||
|
|
||||||
dev = device_create(pseudo_lock_class, NULL,
|
dev = device_create(&pseudo_lock_class, NULL,
|
||||||
MKDEV(pseudo_lock_major, new_minor),
|
MKDEV(pseudo_lock_major, new_minor),
|
||||||
rdtgrp, "%s", rdtgrp->kn->name);
|
rdtgrp, "%s", rdtgrp->kn->name);
|
||||||
|
|
||||||
@@ -1383,7 +1397,7 @@ int rdtgroup_pseudo_lock_create(struct rdtgroup *rdtgrp)
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
out_device:
|
out_device:
|
||||||
device_destroy(pseudo_lock_class, MKDEV(pseudo_lock_major, new_minor));
|
device_destroy(&pseudo_lock_class, MKDEV(pseudo_lock_major, new_minor));
|
||||||
out_debugfs:
|
out_debugfs:
|
||||||
debugfs_remove_recursive(plr->debugfs_dir);
|
debugfs_remove_recursive(plr->debugfs_dir);
|
||||||
pseudo_lock_minor_release(new_minor);
|
pseudo_lock_minor_release(new_minor);
|
||||||
@@ -1424,7 +1438,7 @@ void rdtgroup_pseudo_lock_remove(struct rdtgroup *rdtgrp)
|
|||||||
|
|
||||||
pseudo_lock_cstates_relax(plr);
|
pseudo_lock_cstates_relax(plr);
|
||||||
debugfs_remove_recursive(rdtgrp->plr->debugfs_dir);
|
debugfs_remove_recursive(rdtgrp->plr->debugfs_dir);
|
||||||
device_destroy(pseudo_lock_class, MKDEV(pseudo_lock_major, plr->minor));
|
device_destroy(&pseudo_lock_class, MKDEV(pseudo_lock_major, plr->minor));
|
||||||
pseudo_lock_minor_release(plr->minor);
|
pseudo_lock_minor_release(plr->minor);
|
||||||
|
|
||||||
free:
|
free:
|
||||||
@@ -1560,16 +1574,6 @@ static const struct file_operations pseudo_lock_dev_fops = {
|
|||||||
.mmap = pseudo_lock_dev_mmap,
|
.mmap = pseudo_lock_dev_mmap,
|
||||||
};
|
};
|
||||||
|
|
||||||
static char *pseudo_lock_devnode(const struct device *dev, umode_t *mode)
|
|
||||||
{
|
|
||||||
const struct rdtgroup *rdtgrp;
|
|
||||||
|
|
||||||
rdtgrp = dev_get_drvdata(dev);
|
|
||||||
if (mode)
|
|
||||||
*mode = 0600;
|
|
||||||
return kasprintf(GFP_KERNEL, "pseudo_lock/%s", rdtgrp->kn->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
int rdt_pseudo_lock_init(void)
|
int rdt_pseudo_lock_init(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@@ -1580,21 +1584,18 @@ int rdt_pseudo_lock_init(void)
|
|||||||
|
|
||||||
pseudo_lock_major = ret;
|
pseudo_lock_major = ret;
|
||||||
|
|
||||||
pseudo_lock_class = class_create("pseudo_lock");
|
ret = class_register(&pseudo_lock_class);
|
||||||
if (IS_ERR(pseudo_lock_class)) {
|
if (ret) {
|
||||||
ret = PTR_ERR(pseudo_lock_class);
|
|
||||||
unregister_chrdev(pseudo_lock_major, "pseudo_lock");
|
unregister_chrdev(pseudo_lock_major, "pseudo_lock");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
pseudo_lock_class->devnode = pseudo_lock_devnode;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void rdt_pseudo_lock_release(void)
|
void rdt_pseudo_lock_release(void)
|
||||||
{
|
{
|
||||||
class_destroy(pseudo_lock_class);
|
class_unregister(&pseudo_lock_class);
|
||||||
pseudo_lock_class = NULL;
|
|
||||||
unregister_chrdev(pseudo_lock_major, "pseudo_lock");
|
unregister_chrdev(pseudo_lock_major, "pseudo_lock");
|
||||||
pseudo_lock_major = 0;
|
pseudo_lock_major = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user