Hi, On Tue, Mar 11, 2025 at 07:28:55PM +0800, oushixiong1025@xxxxxxx wrote: > From: Shixiong Ou <oushixiong@xxxxxxxxxx> > > Use device_add_group() to simplify creation and removal. > > Signed-off-by: Shixiong Ou <oushixiong@xxxxxxxxxx> > --- > drivers/video/fbdev/core/fbcon.c | 48 +++++++++++++++----------------- > 1 file changed, 22 insertions(+), 26 deletions(-) > > diff --git a/drivers/video/fbdev/core/fbcon.c b/drivers/video/fbdev/core/fbcon.c > index 07d127110ca4..51c3e8a5a092 100644 > --- a/drivers/video/fbdev/core/fbcon.c > +++ b/drivers/video/fbdev/core/fbcon.c > @@ -3159,7 +3159,7 @@ static const struct consw fb_con = { > .con_debug_leave = fbcon_debug_leave, > }; > > -static ssize_t store_rotate(struct device *device, > +static ssize_t rotate_store(struct device *device, > struct device_attribute *attr, const char *buf, > size_t count) > { > @@ -3181,7 +3181,7 @@ static ssize_t store_rotate(struct device *device, > return count; > } > > -static ssize_t store_rotate_all(struct device *device, > +static ssize_t rotate_all_store(struct device *device, > struct device_attribute *attr,const char *buf, > size_t count) > { > @@ -3203,7 +3203,7 @@ static ssize_t store_rotate_all(struct device *device, > return count; > } > > -static ssize_t show_rotate(struct device *device, > +static ssize_t rotate_show(struct device *device, > struct device_attribute *attr,char *buf) > { > struct fb_info *info; > @@ -3222,7 +3222,7 @@ static ssize_t show_rotate(struct device *device, > return sysfs_emit(buf, "%d\n", rotate); > } > > -static ssize_t show_cursor_blink(struct device *device, > +static ssize_t cursor_blink_show(struct device *device, > struct device_attribute *attr, char *buf) > { > struct fb_info *info; > @@ -3247,7 +3247,7 @@ static ssize_t show_cursor_blink(struct device *device, > return sysfs_emit(buf, "%d\n", blink); > } > > -static ssize_t store_cursor_blink(struct device *device, > +static ssize_t cursor_blink_store(struct device *device, > struct device_attribute *attr, > const char *buf, size_t count) > { > @@ -3281,32 +3281,30 @@ static ssize_t store_cursor_blink(struct device *device, > return count; > } > > -static struct device_attribute device_attrs[] = { > - __ATTR(rotate, S_IRUGO|S_IWUSR, show_rotate, store_rotate), > - __ATTR(rotate_all, S_IWUSR, NULL, store_rotate_all), > - __ATTR(cursor_blink, S_IRUGO|S_IWUSR, show_cursor_blink, > - store_cursor_blink), > +static DEVICE_ATTR_RW(rotate); > +static DEVICE_ATTR_WO(rotate_all); > +static DEVICE_ATTR_RW(cursor_blink); > + > +static struct attribute *fbcon_device_attrs[] = { > + &dev_attr_rotate.attr, > + &dev_attr_rotate_all.attr, > + &dev_attr_cursor_blink.attr, > + NULL, No trailing commas after sentinel values. > +}; > + > +static const struct attribute_group fbcon_device_attr_group = { > + .attrs = fbcon_device_attrs, > }; > > static int fbcon_init_device(void) > { > - int i, error = 0; > + int ret; > > fbcon_has_sysfs = 1; > > - for (i = 0; i < ARRAY_SIZE(device_attrs); i++) { > - error = device_create_file(fbcon_device, &device_attrs[i]); > - > - if (error) > - break; > - } > - > - if (error) { > - while (--i >= 0) > - device_remove_file(fbcon_device, &device_attrs[i]); > - > + ret = device_add_group(fbcon_device, &fbcon_device_attr_group); > + if (ret) > fbcon_has_sysfs = 0; > - } > > return 0; > } > @@ -3389,11 +3387,9 @@ void __init fb_console_init(void) > > static void __exit fbcon_deinit_device(void) > { > - int i; > > if (fbcon_has_sysfs) { > - for (i = 0; i < ARRAY_SIZE(device_attrs); i++) > - device_remove_file(fbcon_device, &device_attrs[i]); > + device_remove_group(fb_info->dev, &fbcon_device_attr_group); Please at least compile-test your changes before submission. > > fbcon_has_sysfs = 0; > } All of this can be simplified even more: * fbcon_deinit_device() can be removed easily, as the attributes are automatically removed when the device is destroyed. * Using device_create_with_groups() the device core will take complete care of the attribute lifecycle, also allowing to remove fbcon_init_device() Thomas