Commit 7630ea17 authored by Ivan Orlov's avatar Ivan Orlov Committed by Greg Kroah-Hartman
Browse files

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: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarIvan Orlov <ivan.orlov0322@gmail.com>
Acked-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Link: https://lore.kernel.org/r/20230620144431.583290-6-gregkh@linuxfoundation.org


Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 5b87c058
Loading
Loading
Loading
Loading
+21 −20
Original line number Original line Diff line number Diff line
@@ -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;
}
}