can't find device_create funtion in a driver containing cdev (habanalabs)
ckim at etri.re.kr
ckim at etri.re.kr
Wed Apr 28 20:56:09 EDT 2021
Hi, Greg KH,
To me cdev_device_add seems to be calling only cdev_add(below).
In this case since dev->devt already holds dev_t value ("hl%d"), it just
sets cdev_set_parent and cdev_add.
int cdev_device_add(struct cdev *cdev, struct device *dev)
{
int rc = 0;
if (dev->devt) {
cdev_set_parent(cdev, &dev->kobj);
rc = cdev_add(cdev, dev->devt, 1);
if (rc)
return rc;
}
rc = device_add(dev);
if (rc)
cdev_del(cdev);
return rc;
}
Are you sure cdev_device_add contains "device_create function"? Shouldn't
device_create be called after class_create?
Class_create is called much later inside the function device_cdev_sysfs_add
later in hl_device_init function(line 1238).
And device_cdev_sysfs_add contains this code. The hl_sysfs_init calls
device_add_groups which calls sysfs_create_groups.
Isn't this sysfs_create_groups function by any chance a group equivalent of
device_create function?
/* hl_sysfs_init() must be done after adding the device to the system */
rc = hl_sysfs_init(hdev);
if (rc) {
dev_err(hdev->dev, "failed to initialize sysfs\n");
goto delete_ctrl_cdev_device;
}
hdev->cdev_sysfs_created = true;
Thanks for helps and regards,
Chan Kim
> -----Original Message-----
> From: Greg KH <greg at kroah.com>
> Sent: Thursday, April 29, 2021 3:32 AM
> To: ckim at etri.re.kr
> Cc: kernelnewbies at kernelnewbies.org
> Subject: Re: can't find device_create funtion in a driver containing cdev
> (habanalabs)
>
> On Wed, Apr 28, 2021 at 10:46:21PM +0900, ckim at etri.re.kr wrote:
> > Hello list members,
> >
> > In habanalabs' goya chip driver,
> > (https://elixir.bootlin.com/linux/v5.4.21/source/drivers/misc/habanala
> > bs/dev
> > ice.c#L1057)
> >
> > I can see cdev_init, cdev_add and class_create functions.
> >
> > Cdev_init is called insde device_init_cdev and cdev_add is called from
> > device_cdev_sysfs_add -> cdev_device_add.
> >
> > I can see class_create being called too. But I couldn't find
> > device_create function (which is used to make sysfs entry?)
> >
> > Can anyone tell me where device_create is called? (or where
> > alternative method is being used?)
>
> Happens in the call to cdev_device_add()
>
More information about the Kernelnewbies
mailing list