From mboxrd@z Thu Jan 1 00:00:00 1970 From: Kay Sievers Date: Thu, 04 Nov 2004 00:12:55 +0000 Subject: Re: put "device" symlink into hotplug environment? Message-Id: <20041104001255.GA17646@vrfy.org> MIME-Version: 1 Content-Type: multipart/mixed; boundary="C7zPtVaVf+AK4Oqc" List-Id: References: <20041103233959.GA17546@vrfy.org> In-Reply-To: <20041103233959.GA17546@vrfy.org> To: linux-hotplug@vger.kernel.org --C7zPtVaVf+AK4Oqc Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Thu, Nov 04, 2004 at 12:39:59AM +0100, Kay Sievers wrote: > Hi Greg, > what if we put the sysfs path of the physical device into the hotplug > environment? All virtual devices will not have the key. This would solve > all the wait for the "device" link issues and we can throw away one of > the exception lists as the kernel will tell us if it is going to create > a symlink. > > I get hotplug events like this now: > > physical backed device: > ACTION=add > SUBSYSTEM=net > DEVPATH=/class/net/eth0 > DEVSYSDEV=/devices/pci0000:00/0000:00:1e.0/0000:02:01.0 > INTERFACE=eth0 > SEQNUM=966 > PATH=/sbin:/bin:/usr/sbin:/usr/bin > HOME=/ > > virtual: > ACTION=add > SUBSYSTEM=net > DEVPATH=/class/net/dummy0 > INTERFACE=dummy0 > SEQNUM=977 > PATH=/sbin:/bin:/usr/sbin:/usr/bin > HOME=/ We can also pass the BUS together with the class device. The search for the BUS value is an expensive tasks in udev, cause we need to reverse lookup the whole /sys/bus directory to find the symlink to our physical device. This is my pci network card again: ACTION=add SUBSYSTEM=net DEVPATH=/class/net/eth0 DEVPHYSDEV=/devices/pci0000:00/0000:00:1e.0/0000:02:01.0 DEVBUS=pci INTERFACE=eth0 SEQNUM=827 PATH=/sbin:/bin:/usr/sbin:/usr/bin HOME=/ And an USB-mouse: ACTION=add SUBSYSTEM=input DEVPATH=/class/input/mouse2 DEVPHYSDEV=/devices/pci0000:00/0000:00:1d.1/usb3/3-2/3-2:1.0 DEVBUS=usb SEQNUM=1001 PATH=/sbin:/bin:/usr/sbin:/usr/bin HOME=/ Hmm, another exception list in wait_for_sysfs killed. :) Kay --C7zPtVaVf+AK4Oqc Content-Type: text/plain; charset=us-ascii Content-Disposition: inline; filename="kernel-DEVSYSDEV-02.patch" ===== drivers/base/class.c 1.54 vs edited ===== --- 1.54/drivers/base/class.c 2004-10-08 20:32:52 +02:00 +++ edited/drivers/base/class.c 2004-11-04 00:54:26 +01:00 @@ -283,8 +283,33 @@ static int class_hotplug(struct kset *ks { struct class_device *class_dev = to_class_dev(kobj); int retval = 0; + int i = 0; + int length = 0; pr_debug("%s - name = %s\n", __FUNCTION__, class_dev->class_id); + + if (class_dev->dev) { + /* add physical device backing this class to environment */ + struct device *dev = class_dev->dev; + char *path = kobject_get_path(&dev->kobj, GFP_KERNEL); + + add_hotplug_env_var(envp, num_envp, &i, buffer, buffer_size, + &length, "DEVPHYSDEV=%s", path); + kfree(path); + + if (dev->bus) + add_hotplug_env_var(envp, num_envp, &i, + buffer, buffer_size, &length, + "DEVBUS=%s", dev->bus->name); + + /* terminate, set to next free slot, shrink available space */ + envp[i] = NULL; + envp = &envp[i]; + num_envp -= i; + buffer = &buffer[length]; + buffer_size -= length; + } + if (class_dev->class->hotplug) { /* have the bus specific function add its stuff */ retval = class_dev->class->hotplug (class_dev, envp, num_envp, --C7zPtVaVf+AK4Oqc-- ------------------------------------------------------- This SF.Net email is sponsored by: Sybase ASE Linux Express Edition - download now for FREE LinuxWorld Reader's Choice Award Winner for best database on Linux. http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel