Re: [PATCH v2] powerpc: vas-api: constify dynamic struct class in coproc api register
From: Greg KH <gregkh@linuxfoundation.org>
Date: 2026-03-09 06:01:18
Also in:
lkml
On Sun, Mar 08, 2026 at 10:46:31PM +0100, Jori Koolstra wrote:
quoted hunk ↗ jump to hunk
The class_create() call has been deprecated in favor of class_register() as the driver core now allows for a struct class to be in read-only memory. In vas_register_coproc_api() the dynamic allocation of the struct class corresonding to the coprocessor type (right now only nx-gzip) is replaced by calling static const struct class* cop_to_class(enum vas_cop_type cop) which links the coprocessor type to the appropriate static const struct class. Compile tested only. Link: https://lore.kernel.org/all/2023040244-duffel-pushpin-f738@gregkh/ (local) Suggested-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Jori Koolstra <jkoolstra@xs4all.nl> --- v2: undo whitespace removal arch/powerpc/platforms/book3s/vas-api.c | 34 +++++++++++++++++++------ 1 file changed, 26 insertions(+), 8 deletions(-)diff --git a/arch/powerpc/platforms/book3s/vas-api.c b/arch/powerpc/platforms/book3s/vas-api.c index ea4ffa63f043..e377981fd533 100644 --- a/arch/powerpc/platforms/book3s/vas-api.c +++ b/arch/powerpc/platforms/book3s/vas-api.c@@ -45,7 +45,7 @@ static struct coproc_dev { struct device *device; char *name; dev_t devt; - struct class *class; + const struct class *class; enum vas_cop_type cop_type; const struct vas_user_win_ops *vops; } coproc_device;@@ -599,6 +599,21 @@ static struct file_operations coproc_fops = { .unlocked_ioctl = coproc_ioctl, }; +static const struct class nx_gzip_class = { + .name = "nx-gzip", + .devnode = coproc_devnode +}; + +static const struct class* cop_to_class(enum vas_cop_type cop) +{ + switch (cop) { + case VAS_COP_TYPE_GZIP: return &nx_gzip_class; + default: + pr_err("No device class defined for cop type %d\n", cop); + return NULL; + } +} + /* * Supporting only nx-gzip coprocessor type now, but this API code * extended to other coprocessor types later.@@ -609,6 +624,10 @@ int vas_register_coproc_api(struct module *mod, enum vas_cop_type cop_type, { int rc = -EINVAL; dev_t devno; + const struct class* class = cop_to_class(cop_type); + + if (!class) + return rc;
How can this happen? This feels odd, are different types of devices being registered here? I don't see where VAS_COP_TYPE_GZIP was being tested in the original code, why add this additional logic? thanks, greg k-h