Skip to content

Commit 7630ea1

Browse files
ivanorlov2206gregkh
authored andcommitted
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>
1 parent 5b87c05 commit 7630ea1

1 file changed

Lines changed: 21 additions & 20 deletions

File tree

arch/x86/kernel/cpu/resctrl/pseudo_lock.c

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,21 @@ static u64 prefetch_disable_bits;
4545
*/
4646
static unsigned int pseudo_lock_major;
4747
static unsigned long pseudo_lock_minor_avail = GENMASK(MINORBITS, 0);
48-
static struct class *pseudo_lock_class;
48+
49+
static char *pseudo_lock_devnode(const struct device *dev, umode_t *mode)
50+
{
51+
const struct rdtgroup *rdtgrp;
52+
53+
rdtgrp = dev_get_drvdata(dev);
54+
if (mode)
55+
*mode = 0600;
56+
return kasprintf(GFP_KERNEL, "pseudo_lock/%s", rdtgrp->kn->name);
57+
}
58+
59+
static const struct class pseudo_lock_class = {
60+
.name = "pseudo_lock",
61+
.devnode = pseudo_lock_devnode,
62+
};
4963

5064
/**
5165
* get_prefetch_disable_bits - prefetch disable bits of supported platforms
@@ -1353,7 +1367,7 @@ int rdtgroup_pseudo_lock_create(struct rdtgroup *rdtgrp)
13531367
&pseudo_measure_fops);
13541368
}
13551369

1356-
dev = device_create(pseudo_lock_class, NULL,
1370+
dev = device_create(&pseudo_lock_class, NULL,
13571371
MKDEV(pseudo_lock_major, new_minor),
13581372
rdtgrp, "%s", rdtgrp->kn->name);
13591373

@@ -1383,7 +1397,7 @@ int rdtgroup_pseudo_lock_create(struct rdtgroup *rdtgrp)
13831397
goto out;
13841398

13851399
out_device:
1386-
device_destroy(pseudo_lock_class, MKDEV(pseudo_lock_major, new_minor));
1400+
device_destroy(&pseudo_lock_class, MKDEV(pseudo_lock_major, new_minor));
13871401
out_debugfs:
13881402
debugfs_remove_recursive(plr->debugfs_dir);
13891403
pseudo_lock_minor_release(new_minor);
@@ -1424,7 +1438,7 @@ void rdtgroup_pseudo_lock_remove(struct rdtgroup *rdtgrp)
14241438

14251439
pseudo_lock_cstates_relax(plr);
14261440
debugfs_remove_recursive(rdtgrp->plr->debugfs_dir);
1427-
device_destroy(pseudo_lock_class, MKDEV(pseudo_lock_major, plr->minor));
1441+
device_destroy(&pseudo_lock_class, MKDEV(pseudo_lock_major, plr->minor));
14281442
pseudo_lock_minor_release(plr->minor);
14291443

14301444
free:
@@ -1560,16 +1574,6 @@ static const struct file_operations pseudo_lock_dev_fops = {
15601574
.mmap = pseudo_lock_dev_mmap,
15611575
};
15621576

1563-
static char *pseudo_lock_devnode(const struct device *dev, umode_t *mode)
1564-
{
1565-
const struct rdtgroup *rdtgrp;
1566-
1567-
rdtgrp = dev_get_drvdata(dev);
1568-
if (mode)
1569-
*mode = 0600;
1570-
return kasprintf(GFP_KERNEL, "pseudo_lock/%s", rdtgrp->kn->name);
1571-
}
1572-
15731577
int rdt_pseudo_lock_init(void)
15741578
{
15751579
int ret;
@@ -1580,21 +1584,18 @@ int rdt_pseudo_lock_init(void)
15801584

15811585
pseudo_lock_major = ret;
15821586

1583-
pseudo_lock_class = class_create("pseudo_lock");
1584-
if (IS_ERR(pseudo_lock_class)) {
1585-
ret = PTR_ERR(pseudo_lock_class);
1587+
ret = class_register(&pseudo_lock_class);
1588+
if (ret) {
15861589
unregister_chrdev(pseudo_lock_major, "pseudo_lock");
15871590
return ret;
15881591
}
15891592

1590-
pseudo_lock_class->devnode = pseudo_lock_devnode;
15911593
return 0;
15921594
}
15931595

15941596
void rdt_pseudo_lock_release(void)
15951597
{
1596-
class_destroy(pseudo_lock_class);
1597-
pseudo_lock_class = NULL;
1598+
class_unregister(&pseudo_lock_class);
15981599
unregister_chrdev(pseudo_lock_major, "pseudo_lock");
15991600
pseudo_lock_major = 0;
16001601
}

0 commit comments

Comments
 (0)