Remove the IDA indexing for OCC devices and instead use the FSI
minor number API. This will make the OCC numbering consistent
with other FSI engines and make the "reg" device tree property
unnecessary.
Signed-off-by: Eddie James <eajames@linux.ibm.com>
Reviewed-by: Ninad Palsule <ninad@linux.ibm.com>
---
drivers/fsi/fsi-occ.c | 48 ++++++++++---------------------------------
1 file changed, 11 insertions(+), 37 deletions(-)
diff --git a/drivers/fsi/fsi-occ.c b/drivers/fsi/fsi-occ.c
index f58b158d097c..11e090da0590 100644
--- a/drivers/fsi/fsi-occ.c
+++ b/drivers/fsi/fsi-occ.c
@@ -4,9 +4,9 @@
#include <linux/err.h>
#include <linux/errno.h>
#include <linux/fs.h>
+#include <linux/fsi.h>
#include <linux/fsi-sbefifo.h>
#include <linux/gfp.h>
-#include <linux/idr.h>
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/miscdevice.h>
@@ -44,6 +44,7 @@ struct occ {
struct device *sbefifo;
char name[32];
int idx;
+ dev_t devt;
bool platform_hwmon;
u8 sequence_number;
void *buffer;
@@ -75,8 +76,6 @@ struct occ_client {
#define to_client(x) container_of((x), struct occ_client, xfr)
-static DEFINE_IDA(occ_ida);
-
static int occ_open(struct inode *inode, struct file *file)
{
struct occ_client *client = kzalloc(sizeof(*client), GFP_KERNEL);
@@ -622,7 +621,6 @@ static int occ_unregister_of_child(struct device *dev, void *data)
static int occ_probe(struct platform_device *pdev)
{
int rc;
- u32 reg;
char child_name[32];
struct occ *occ;
struct platform_device *hwmon_dev = NULL;
@@ -637,6 +635,10 @@ static int occ_probe(struct platform_device *pdev)
if (!occ)
return -ENOMEM;
+ rc = fsi_get_new_minor(to_fsi_dev(dev->parent), fsi_dev_occ, &occ->devt, &occ->idx);
+ if (rc)
+ return rc;
+
/* SBE words are always four bytes */
occ->buffer = kvmalloc(OCC_MAX_RESP_WORDS * 4, GFP_KERNEL);
if (!occ->buffer)
@@ -651,23 +653,6 @@ static int occ_probe(struct platform_device *pdev)
*/
occ->sequence_number = (u8)((jiffies % 0xff) + 1);
mutex_init(&occ->occ_lock);
-
- if (dev->of_node) {
- rc = of_property_read_u32(dev->of_node, "reg", ®);
- if (!rc) {
- /* make sure we don't have a duplicate from dts */
- occ->idx = ida_alloc_range(&occ_ida, reg, reg,
- GFP_KERNEL);
- if (occ->idx < 0)
- occ->idx = ida_alloc_min(&occ_ida, 1,
- GFP_KERNEL);
- } else {
- occ->idx = ida_alloc_min(&occ_ida, 1, GFP_KERNEL);
- }
- } else {
- occ->idx = ida_alloc_min(&occ_ida, 1, GFP_KERNEL);
- }
-
platform_set_drvdata(pdev, occ);
snprintf(occ->name, sizeof(occ->name), "occ%d", occ->idx);
@@ -679,7 +664,7 @@ static int occ_probe(struct platform_device *pdev)
rc = misc_register(&occ->mdev);
if (rc) {
dev_err(dev, "failed to register miscdevice: %d\n", rc);
- ida_free(&occ_ida, occ->idx);
+ fsi_free_minor(occ->devt);
kvfree(occ->buffer);
return rc;
}
@@ -718,7 +703,9 @@ static void occ_remove(struct platform_device *pdev)
else
device_for_each_child(&pdev->dev, NULL, occ_unregister_of_child);
- ida_free(&occ_ida, occ->idx);
+ fsi_free_minor(occ->devt);
+
+ return 0;
}
static const struct of_device_id occ_match[] = {
@@ -743,20 +730,7 @@ static struct platform_driver occ_driver = {
.remove_new = occ_remove,
};
-static int occ_init(void)
-{
- return platform_driver_register(&occ_driver);
-}
-
-static void occ_exit(void)
-{
- platform_driver_unregister(&occ_driver);
-
- ida_destroy(&occ_ida);
-}
-
-module_init(occ_init);
-module_exit(occ_exit);
+module_platform_driver(occ_driver);
MODULE_AUTHOR("Eddie James <eajames@linux.ibm.com>");
MODULE_DESCRIPTION("BMC P9 OCC driver");
--
2.43.0
Hi Eddie, kernel test robot noticed the following build warnings: [auto build test WARNING on linus/master] [also build test WARNING on v6.11 next-20240920] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Eddie-James/fsi-hub-Set-master-index-to-link-number-plus-one/20240918-012109 base: linus/master patch link: https://lore.kernel.org/r/20240917171647.1403910-13-eajames%40linux.ibm.com patch subject: [PATCH 12/15] fsi: occ: Get device number from FSI minor number API config: s390-allmodconfig (https://download.01.org/0day-ci/archive/20240921/202409210200.8czVX7S4-lkp@intel.com/config) compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project 8663a75fa2f31299ab8d1d90288d9df92aadee88) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240921/202409210200.8czVX7S4-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202409210200.8czVX7S4-lkp@intel.com/ All warnings (new ones prefixed by >>): In file included from drivers/fsi/fsi-occ.c:3: In file included from include/linux/device.h:32: In file included from include/linux/device/driver.h:21: In file included from include/linux/module.h:19: In file included from include/linux/elf.h:6: In file included from arch/s390/include/asm/elf.h:181: In file included from arch/s390/include/asm/mmu_context.h:11: In file included from arch/s390/include/asm/pgalloc.h:18: In file included from include/linux/mm.h:2237: include/linux/vmstat.h:503:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 503 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 504 | item]; | ~~~~ include/linux/vmstat.h:510:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 510 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 511 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ include/linux/vmstat.h:517:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion] 517 | return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_" | ~~~~~~~~~~~ ^ ~~~ include/linux/vmstat.h:523:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion] 523 | return vmstat_text[NR_VM_ZONE_STAT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~ ^ 524 | NR_VM_NUMA_EVENT_ITEMS + | ~~~~~~~~~~~~~~~~~~~~~~ >> drivers/fsi/fsi-occ.c:708:2: warning: void function 'occ_remove' should not return a value [-Wreturn-mismatch] 708 | return 0; | ^ ~ 5 warnings generated. vim +/occ_remove +708 drivers/fsi/fsi-occ.c 689 690 static void occ_remove(struct platform_device *pdev) 691 { 692 struct occ *occ = platform_get_drvdata(pdev); 693 694 misc_deregister(&occ->mdev); 695 696 mutex_lock(&occ->occ_lock); 697 kvfree(occ->buffer); 698 occ->buffer = NULL; 699 mutex_unlock(&occ->occ_lock); 700 701 if (occ->platform_hwmon) 702 device_for_each_child(&pdev->dev, NULL, occ_unregister_platform_child); 703 else 704 device_for_each_child(&pdev->dev, NULL, occ_unregister_of_child); 705 706 fsi_free_minor(occ->devt); 707 > 708 return 0; 709 } 710 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
Hi Eddie, kernel test robot noticed the following build errors: [auto build test ERROR on linus/master] [also build test ERROR on v6.11 next-20240920] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Eddie-James/fsi-hub-Set-master-index-to-link-number-plus-one/20240918-012109 base: linus/master patch link: https://lore.kernel.org/r/20240917171647.1403910-13-eajames%40linux.ibm.com patch subject: [PATCH 12/15] fsi: occ: Get device number from FSI minor number API config: arm-randconfig-002-20240920 (https://download.01.org/0day-ci/archive/20240920/202409202101.tu2dHrK3-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 14.1.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240920/202409202101.tu2dHrK3-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202409202101.tu2dHrK3-lkp@intel.com/ All errors (new ones prefixed by >>): drivers/fsi/fsi-occ.c: In function 'occ_remove': >> drivers/fsi/fsi-occ.c:708:16: error: 'return' with a value, in function returning void [-Wreturn-mismatch] 708 | return 0; | ^ drivers/fsi/fsi-occ.c:690:13: note: declared here 690 | static void occ_remove(struct platform_device *pdev) | ^~~~~~~~~~ vim +/return +708 drivers/fsi/fsi-occ.c 689 690 static void occ_remove(struct platform_device *pdev) 691 { 692 struct occ *occ = platform_get_drvdata(pdev); 693 694 misc_deregister(&occ->mdev); 695 696 mutex_lock(&occ->occ_lock); 697 kvfree(occ->buffer); 698 occ->buffer = NULL; 699 mutex_unlock(&occ->occ_lock); 700 701 if (occ->platform_hwmon) 702 device_for_each_child(&pdev->dev, NULL, occ_unregister_platform_child); 703 else 704 device_for_each_child(&pdev->dev, NULL, occ_unregister_of_child); 705 706 fsi_free_minor(occ->devt); 707 > 708 return 0; 709 } 710 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
Hi Eddie, kernel test robot noticed the following build warnings: [auto build test WARNING on linus/master] [also build test WARNING on v6.11 next-20240920] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Eddie-James/fsi-hub-Set-master-index-to-link-number-plus-one/20240918-012109 base: linus/master patch link: https://lore.kernel.org/r/20240917171647.1403910-13-eajames%40linux.ibm.com patch subject: [PATCH 12/15] fsi: occ: Get device number from FSI minor number API config: arc-randconfig-002-20240920 (https://download.01.org/0day-ci/archive/20240920/202409201954.IYcZNCSj-lkp@intel.com/config) compiler: arc-elf-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240920/202409201954.IYcZNCSj-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202409201954.IYcZNCSj-lkp@intel.com/ All warnings (new ones prefixed by >>): drivers/fsi/fsi-occ.c: In function 'occ_remove': >> drivers/fsi/fsi-occ.c:708:16: warning: 'return' with a value, in function returning void [-Wreturn-type] 708 | return 0; | ^ drivers/fsi/fsi-occ.c:690:13: note: declared here 690 | static void occ_remove(struct platform_device *pdev) | ^~~~~~~~~~ vim +/return +708 drivers/fsi/fsi-occ.c 689 690 static void occ_remove(struct platform_device *pdev) 691 { 692 struct occ *occ = platform_get_drvdata(pdev); 693 694 misc_deregister(&occ->mdev); 695 696 mutex_lock(&occ->occ_lock); 697 kvfree(occ->buffer); 698 occ->buffer = NULL; 699 mutex_unlock(&occ->occ_lock); 700 701 if (occ->platform_hwmon) 702 device_for_each_child(&pdev->dev, NULL, occ_unregister_platform_child); 703 else 704 device_for_each_child(&pdev->dev, NULL, occ_unregister_of_child); 705 706 fsi_free_minor(occ->devt); 707 > 708 return 0; 709 } 710 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
© 2016 - 2024 Red Hat, Inc.