On Fri, Dec 13, 2019 at 5:21 PM Liming Sun <lsun@xxxxxxxxxxxx> wrote: > + ret = sysfs_create_group(&dev->kobj, &mlxbf_bootctl_group); > + if (ret) { > + dev_err(dev, "failed to create attributes, err=%d\n", ret); > + return ret; > + } > + > /* Ensure we have the UUID we expect for this service. */ > arm_smccc_smc(MLXBF_BOOTCTL_SIP_SVC_UID, 0, 0, 0, 0, 0, 0, 0, &res); > guid_parse(mlxbf_bootctl_svc_uuid_str, &guid); > @@ -305,8 +312,16 @@ static int mlxbf_bootctl_probe(struct platform_device *pdev) > return 0; > } > > +static int mlxbf_bootctl_remove(struct platform_device *pdev) > +{ > + sysfs_remove_group(&pdev->dev.kobj, &mlxbf_bootctl_group); > + > + return 0; > +} > + > static struct platform_driver mlxbf_bootctl_driver = { > .probe = mlxbf_bootctl_probe, > + .remove = mlxbf_bootctl_remove, > .driver = { > .name = "mlxbf-bootctl", > .groups = mlxbf_bootctl_groups, Please, use dev_groups member of the struct driver instead of above approach. -- With Best Regards, Andy Shevchenko