From: Lucas Magasweran <lucasrangit@gmail.com>
To: linux-hwmon@vger.kernel.org, jdelvare@suse.de
Subject: hwmon_device_register_with_info registration API issue
Date: Sat, 05 May 2018 00:22:29 +0200 [thread overview]
Message-ID: <1525472549.6877.81.camel@gmail.com> (raw)
Hi Jean and al,
Thank you for your Kernel Recipes 2016 talk about the new hwmon
registration API [1].
I'm trying to use the latest hwmon_device_register_with_info() API
where hwmon core handles the sysfs attributes for me. However, I cannot
use it with a NULL parent struct device *dev and non-NULL struct
hwmon_chip_info *chip. My platform driver module_init() calls
hwmon_device_register_with_info(). __hwmon_device_register() has a NULL
pointer dereference error because it uses device managed memory
allocation internally.
For example,
my_hwmon_dev = hwmon_device_register_with_info(NULL, "my_name", NULL,
&my_hwmon_chip_info,
NULL);
--> __hwmon_device_register(NULL, "my_name", NULL,
&my_hwmon_chip_info, NULL);
----> hwdev->groups = devm_kcalloc(NULL, ngroups,
sizeof(*groups), GFP_KERNEL);
I see that later in the function dev is checked for NULL in "hdev-
>of_node = dev ? dev->of_node : NULL;" but it cannot be NULL for
devm_kcalloc().
I tried the following 4.10.17 patch because I expected the hwmon
attributes to be stored with the hwmon device directly and not the
struct device *dev parent. However, none of my attributes are showing
up in /sys/class/hwmon#/.
Is my approach wrong?
diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
index 3932f92..2e32589 100644
--- a/drivers/hwmon/hwmon.c
+++ b/drivers/hwmon/hwmon.c
@@ -560,6 +560,17 @@ __hwmon_device_register(struct device *dev, const
char *name, void *drvdata,
hdev = &hwdev->dev;
+ hwdev->name = name;
+ hdev->class = &hwmon_class;
+ hdev->parent = dev;
+ hdev->of_node = dev ? dev->of_node : NULL;
+ hwdev->chip = chip;
+ dev_set_drvdata(hdev, drvdata);
+ dev_set_name(hdev, HWMON_ID_FORMAT, id);
+ err = device_register(hdev);
+ if (err)
+ goto free_hwmon;
+
if (chip) {
struct attribute **attrs;
int ngroups = 2; /* terminating NULL plus &hwdev-
>groups */
@@ -568,14 +579,14 @@ __hwmon_device_register(struct device *dev, const
char *name, void *drvdata,
for (i = 0; groups[i]; i++)
ngroups++;
- hwdev->groups = devm_kcalloc(dev, ngroups,
sizeof(*groups),
+ hwdev->groups = devm_kcalloc(dev ? dev : hdev, ngroups,
sizeof(*groups),
GFP_KERNEL);
if (!hwdev->groups) {
err = -ENOMEM;
goto free_hwmon;
}
- attrs = __hwmon_create_attrs(dev, drvdata, chip);
+ attrs = __hwmon_create_attrs(dev ? dev : hdev, drvdata,
chip);
if (IS_ERR(attrs)) {
err = PTR_ERR(attrs);
goto free_hwmon;
@@ -595,17 +606,6 @@ __hwmon_device_register(struct device *dev, const
char *name, void *drvdata,
hdev->groups = groups;
}
- hwdev->name = name;
- hdev->class = &hwmon_class;
- hdev->parent = dev;
- hdev->of_node = dev ? dev->of_node : NULL;
- hwdev->chip = chip;
- dev_set_drvdata(hdev, drvdata);
- dev_set_name(hdev, HWMON_ID_FORMAT, id);
- err = device_register(hdev);
- if (err)
- goto free_hwmon;
-
if (chip && chip->ops->read &&
chip->info[0]->type == hwmon_chip &&
(chip->info[0]->config[0] & HWMON_C_REGISTER_TZ)) {
[1] https://kernel-recipes.org/en/2016/talks/new-hwmon-device-registra
tion-api/
next reply other threads:[~2018-05-04 22:22 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-04 22:22 Lucas Magasweran [this message]
2018-05-04 22:39 ` hwmon_device_register_with_info registration API issue Guenter Roeck
2018-05-08 11:43 ` [PATCH] hwmon: (core) check parent dev != NULL when chip != NULL Lucas Magasweran
2018-05-08 11:43 ` Lucas Magasweran
2018-05-08 22:16 ` Guenter Roeck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1525472549.6877.81.camel@gmail.com \
--to=lucasrangit@gmail.com \
--cc=jdelvare@suse.de \
--cc=linux-hwmon@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.