Re: [PATCH 2/2] platform/x86: Add Intel Software Defined Silicon driver
From: Greg KH <gregkh@linuxfoundation.org>
Date: 2021-09-25 06:27:40
Also in:
lkml, platform-driver-x86
On Fri, Sep 24, 2021 at 02:31:57PM -0700, David E. Box wrote: Quick review:
+static int sdsi_probe(struct platform_device *pdev)
+{
+ void __iomem *disc_addr;
+ struct sdsi_priv *priv;
+ int ret;
+
+ disc_addr = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(disc_addr))
+ return PTR_ERR(disc_addr);
+
+ priv = kzalloc(sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ kref_init(&priv->kref);
+
+ platform_set_drvdata(pdev, priv);
+ priv->pdev = pdev;
+ mutex_init(&priv->mb_lock);
+ mutex_init(&priv->akc_lock);
+
+ memcpy_fromio(&priv->disc_table, disc_addr, DISC_TABLE_SIZE);
+
+ ret = sdsi_map_sdsi_registers(pdev);
+ if (ret)
+ goto put_kref;
+
+ ret = sdsi_create_misc_device(pdev);
+ if (ret)
+ goto put_kref;
+
+ ret = sdsi_add_bin_attrs(pdev);You just raced with userspace and lost. Please attach your attributes to the misc device before registering it. Also, you need a Documentation/ABI/ entry for your new sysfs file(s).
+ if (ret)
+ goto deregister_misc;
+
+ priv->dev_present = true;
+
+ return 0;
+
+deregister_misc:
+ misc_deregister(&priv->miscdev);
+put_kref:
+ kref_put(&priv->kref, sdsi_priv_release);
+
+ return ret;
+}
+
+static int sdsi_remove(struct platform_device *pdev)
+{
+ struct sdsi_priv *priv = platform_get_drvdata(pdev);
+
+ priv->dev_present = false;
+ sysfs_remove_bin_file(&priv->pdev->dev.kobj, &priv->registers_bin_attr);
+ misc_deregister(&priv->miscdev);
+ kref_put(&priv->kref, sdsi_priv_release);Why do you need a kref for a structure that already can be controlled by a different lifetime rule?
+
+ return 0;
+}
+
+static struct platform_driver sdsi_driver = {
+ .driver = {
+ .name = SDSI_DEV_NAME,
+ .dev_groups = sdsi_groups,
+ },
+ .probe = sdsi_probe,
+ .remove = sdsi_remove,
+};
+module_platform_driver(sdsi_driver);What causes the platform to know to register, and enable, this platform driver? Shouldn't there be some hardware involved that is discoverable to enable it to load dynamically? thanks, greg k-h