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@kroah.com> Sent: Thursday, April 29, 2021 3:32 AM To: ckim@etri.re.kr Cc: kernelnewbies@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@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()