* [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c @ 2008-01-08 16:33 Sudhir Kumar 2008-01-10 17:34 ` Greg KH 0 siblings, 1 reply; 15+ messages in thread From: Sudhir Kumar @ 2008-01-08 16:33 UTC (permalink / raw) To: akpm; +Cc: linux-kernel, sam, greg Hi Andrew, Kernel build fails on my machine with error : LD drivers/net/ehea/built-in.o CC [M] drivers/net/ehea/ehea_main.o drivers/net/ehea/ehea_main.c: In function ‘ehea_driver_sysfs_add’: drivers/net/ehea/ehea_main.c:2812: error: ‘struct device_driver’ has no member named ‘kobj’ drivers/net/ehea/ehea_main.c:2815: error: ‘struct device_driver’ has no member named ‘kobj’ drivers/net/ehea/ehea_main.c:2818: error: ‘struct device_driver’ has no member named ‘kobj’ drivers/net/ehea/ehea_main.c: In function ‘ehea_driver_sysfs_remove’: drivers/net/ehea/ehea_main.c:2830: error: ‘struct device_driver’ has no member named ‘kobj’ make[3]: *** [drivers/net/ehea/ehea_main.o] Error 1 make[2]: *** [drivers/net/ehea] Error 2 make[1]: *** [drivers/net] Error 2 make: *** [drivers] Error 2 The structure device_driver(in device.h) has a member struct driver_private which contains the member kobj (according to drivers/base/base.h). But in device.h struct driver_private has been declared localy and neither defined nor included from base.h. So my effort to use driver->driver_private->obj also does not work. (I am surprised from where do you access the struct device_driver) Thanks and Regards Sudhir Kumar ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-08 16:33 [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c Sudhir Kumar @ 2008-01-10 17:34 ` Greg KH 2008-01-18 9:16 ` Jan-Bernd Themann 0 siblings, 1 reply; 15+ messages in thread From: Greg KH @ 2008-01-10 17:34 UTC (permalink / raw) To: Sudhir Kumar; +Cc: akpm, linux-kernel, sam On Tue, Jan 08, 2008 at 10:03:05PM +0530, Sudhir Kumar wrote: > Hi Andrew, > Kernel build fails on my machine with error : > > > LD drivers/net/ehea/built-in.o > CC [M] drivers/net/ehea/ehea_main.o > drivers/net/ehea/ehea_main.c: In function ???ehea_driver_sysfs_add???: > drivers/net/ehea/ehea_main.c:2812: error: ???struct device_driver??? has no > member named ???kobj??? > drivers/net/ehea/ehea_main.c:2815: error: ???struct device_driver??? has no > member named ???kobj??? > drivers/net/ehea/ehea_main.c:2818: error: ???struct device_driver??? has no > member named ???kobj??? > drivers/net/ehea/ehea_main.c: In function ???ehea_driver_sysfs_remove???: > drivers/net/ehea/ehea_main.c:2830: error: ???struct device_driver??? has no > member named ???kobj??? > make[3]: *** [drivers/net/ehea/ehea_main.o] Error 1 > make[2]: *** [drivers/net/ehea] Error 2 > make[1]: *** [drivers/net] Error 2 > make: *** [drivers] Error 2 > > The structure device_driver(in device.h) has a member struct driver_private which > contains the member kobj (according to drivers/base/base.h). > But in device.h struct driver_private has been declared localy and > neither defined nor included from base.h. > So my effort to use driver->driver_private->obj also does not work. > (I am surprised from where do you access the struct device_driver) That is because a driver should not be accessing such a field. And especially not in this manner, why would this driver be creating a symlink that has already been created by the driver core? This whole thing can just be removed with no problems. Can you try just removing the ehea_driver_sysfs_add and ehea_driver_sysfs_remove functions to verify this as I don't have the hardware present to test it out. thanks, greg k-h ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-10 17:34 ` Greg KH @ 2008-01-18 9:16 ` Jan-Bernd Themann 2008-01-25 19:10 ` Nathan Lynch 2008-01-28 18:25 ` Greg KH 0 siblings, 2 replies; 15+ messages in thread From: Jan-Bernd Themann @ 2008-01-18 9:16 UTC (permalink / raw) To: Greg KH; +Cc: Sudhir Kumar, akpm, linux-kernel, sam, Christoph Raisch Hi, sorry for answering so late, I'm only tracking netdev and ppc mailing list. On Thursday 10 January 2008 18:34, Greg KH wrote: > > The structure device_driver(in device.h) has a member struct driver_private which > > contains the member kobj (according to drivers/base/base.h). > > But in device.h struct driver_private has been declared localy and > > neither defined nor included from base.h. > > So my effort to use driver->driver_private->obj also does not work. > > (I am surprised from where do you access the struct device_driver) > > That is because a driver should not be accessing such a field. > > And especially not in this manner, why would this driver be creating a > symlink that has already been created by the driver core? This whole > thing can just be removed with no problems. Can you try just removing > the ehea_driver_sysfs_add and ehea_driver_sysfs_remove functions to > verify this as I don't have the hardware present to test it out. The eHEA driver tries to orginize its sys-entries as close as possible to other ethernet drivers. Each eHEA NIC has multiple ports which is not that common in PCI. This means that each port is represented by a subdirectory which has not the "driver" sys-link, only the root directory has. Some tools expect to have this driver link in each port directory. That is the reason why this link is created manually. Are there any other ways to create this link? Regards, Jan-Bernd Themann + Christoph Raisch ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-18 9:16 ` Jan-Bernd Themann @ 2008-01-25 19:10 ` Nathan Lynch 2008-01-28 18:21 ` Greg KH 2008-01-28 18:24 ` Greg KH 2008-01-28 18:25 ` Greg KH 1 sibling, 2 replies; 15+ messages in thread From: Nathan Lynch @ 2008-01-25 19:10 UTC (permalink / raw) To: Jan-Bernd Themann Cc: Greg KH, Sudhir Kumar, akpm, linux-kernel, sam, Christoph Raisch Jan-Bernd Themann wrote: > Hi, > > sorry for answering so late, I'm only tracking netdev and ppc mailing list. > > On Thursday 10 January 2008 18:34, Greg KH wrote: > > > The structure device_driver(in device.h) has a member struct driver_private which > > > contains the member kobj (according to drivers/base/base.h). > > > But in device.h struct driver_private has been declared localy and > > > neither defined nor included from base.h. > > > So my effort to use driver->driver_private->obj also does not work. > > > (I am surprised from where do you access the struct device_driver) > > > > That is because a driver should not be accessing such a field. > > > > And especially not in this manner, why would this driver be creating a > > symlink that has already been created by the driver core? This whole > > thing can just be removed with no problems. Can you try just removing > > the ehea_driver_sysfs_add and ehea_driver_sysfs_remove functions to > > verify this as I don't have the hardware present to test it out. > > The eHEA driver tries to orginize its sys-entries as close as possible to > other ethernet drivers. Each eHEA NIC has multiple ports which is not that > common in PCI. This means that each port is represented by a subdirectory > which has not the "driver" sys-link, only the root directory has. > Some tools expect to have this driver link in each port directory. > That is the reason why this link is created manually. > > Are there any other ways to create this link? This is now broken in mainline... drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_add': drivers/net/ehea/ehea_main.c:2812: error: 'struct device_driver' has no member named 'kobj' drivers/net/ehea/ehea_main.c:2815: error: 'struct device_driver' has no member named 'kobj' drivers/net/ehea/ehea_main.c:2818: error: 'struct device_driver' has no member named 'kobj' drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_remove': drivers/net/ehea/ehea_main.c:2830: error: 'struct device_driver' has no member named 'kobj' ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-25 19:10 ` Nathan Lynch @ 2008-01-28 18:21 ` Greg KH 2008-01-28 18:24 ` Greg KH 1 sibling, 0 replies; 15+ messages in thread From: Greg KH @ 2008-01-28 18:21 UTC (permalink / raw) To: Nathan Lynch Cc: Jan-Bernd Themann, Sudhir Kumar, akpm, linux-kernel, sam, Christoph Raisch On Fri, Jan 25, 2008 at 01:10:48PM -0600, Nathan Lynch wrote: > Jan-Bernd Themann wrote: > > Hi, > > > > sorry for answering so late, I'm only tracking netdev and ppc mailing list. > > > > On Thursday 10 January 2008 18:34, Greg KH wrote: > > > > The structure device_driver(in device.h) has a member struct driver_private which > > > > contains the member kobj (according to drivers/base/base.h). > > > > But in device.h struct driver_private has been declared localy and > > > > neither defined nor included from base.h. > > > > So my effort to use driver->driver_private->obj also does not work. > > > > (I am surprised from where do you access the struct device_driver) > > > > > > That is because a driver should not be accessing such a field. > > > > > > And especially not in this manner, why would this driver be creating a > > > symlink that has already been created by the driver core? This whole > > > thing can just be removed with no problems. Can you try just removing > > > the ehea_driver_sysfs_add and ehea_driver_sysfs_remove functions to > > > verify this as I don't have the hardware present to test it out. > > > > The eHEA driver tries to orginize its sys-entries as close as possible to > > other ethernet drivers. Each eHEA NIC has multiple ports which is not that > > common in PCI. This means that each port is represented by a subdirectory > > which has not the "driver" sys-link, only the root directory has. > > Some tools expect to have this driver link in each port directory. > > That is the reason why this link is created manually. > > > > Are there any other ways to create this link? > > > This is now broken in mainline... > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_add': > drivers/net/ehea/ehea_main.c:2812: error: 'struct device_driver' has > no member named 'kobj' > drivers/net/ehea/ehea_main.c:2815: error: 'struct device_driver' has > no member named 'kobj' > drivers/net/ehea/ehea_main.c:2818: error: 'struct device_driver' has > no member named 'kobj' > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_remove': > drivers/net/ehea/ehea_main.c:2830: error: 'struct device_driver' has > no member named 'kobj' Crap, I missed that one. I'll go fix it up right now... sorry about this. greg k-h ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-25 19:10 ` Nathan Lynch 2008-01-28 18:21 ` Greg KH @ 2008-01-28 18:24 ` Greg KH 2008-01-28 19:22 ` Nathan Lynch 1 sibling, 1 reply; 15+ messages in thread From: Greg KH @ 2008-01-28 18:24 UTC (permalink / raw) To: Nathan Lynch Cc: Jan-Bernd Themann, Sudhir Kumar, akpm, linux-kernel, sam, Christoph Raisch On Fri, Jan 25, 2008 at 01:10:48PM -0600, Nathan Lynch wrote: > Jan-Bernd Themann wrote: > > Hi, > > > > sorry for answering so late, I'm only tracking netdev and ppc mailing list. > > > > On Thursday 10 January 2008 18:34, Greg KH wrote: > > > > The structure device_driver(in device.h) has a member struct driver_private which > > > > contains the member kobj (according to drivers/base/base.h). > > > > But in device.h struct driver_private has been declared localy and > > > > neither defined nor included from base.h. > > > > So my effort to use driver->driver_private->obj also does not work. > > > > (I am surprised from where do you access the struct device_driver) > > > > > > That is because a driver should not be accessing such a field. > > > > > > And especially not in this manner, why would this driver be creating a > > > symlink that has already been created by the driver core? This whole > > > thing can just be removed with no problems. Can you try just removing > > > the ehea_driver_sysfs_add and ehea_driver_sysfs_remove functions to > > > verify this as I don't have the hardware present to test it out. > > > > The eHEA driver tries to orginize its sys-entries as close as possible to > > other ethernet drivers. Each eHEA NIC has multiple ports which is not that > > common in PCI. This means that each port is represented by a subdirectory > > which has not the "driver" sys-link, only the root directory has. > > Some tools expect to have this driver link in each port directory. > > That is the reason why this link is created manually. > > > > Are there any other ways to create this link? > > > This is now broken in mainline... > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_add': > drivers/net/ehea/ehea_main.c:2812: error: 'struct device_driver' has > no member named 'kobj' > drivers/net/ehea/ehea_main.c:2815: error: 'struct device_driver' has > no member named 'kobj' > drivers/net/ehea/ehea_main.c:2818: error: 'struct device_driver' has > no member named 'kobj' > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_remove': > drivers/net/ehea/ehea_main.c:2830: error: 'struct device_driver' has > no member named 'kobj' Does the patch below fix this? That driver should not have been trying to create symlinks that the driver core has already created for it. Dumb, dumb, dumb... thanks, greg k-h ------------------ --- drivers/net/ehea/ehea_main.c | 37 ------------------------------------- 1 file changed, 37 deletions(-) --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c @@ -2804,34 +2804,6 @@ static void __devinit logical_port_relea of_node_put(port->ofdev.node); } -static int ehea_driver_sysfs_add(struct device *dev, - struct device_driver *driver) -{ - int ret; - - ret = sysfs_create_link(&driver->kobj, &dev->kobj, - kobject_name(&dev->kobj)); - if (ret == 0) { - ret = sysfs_create_link(&dev->kobj, &driver->kobj, - "driver"); - if (ret) - sysfs_remove_link(&driver->kobj, - kobject_name(&dev->kobj)); - } - return ret; -} - -static void ehea_driver_sysfs_remove(struct device *dev, - struct device_driver *driver) -{ - struct device_driver *drv = driver; - - if (drv) { - sysfs_remove_link(&drv->kobj, kobject_name(&dev->kobj)); - sysfs_remove_link(&dev->kobj, "driver"); - } -} - static struct device *ehea_register_port(struct ehea_port *port, struct device_node *dn) { @@ -2856,16 +2828,8 @@ static struct device *ehea_register_port goto out_unreg_of_dev; } - ret = ehea_driver_sysfs_add(&port->ofdev.dev, &ehea_driver.driver); - if (ret) { - ehea_error("failed to register sysfs driver link"); - goto out_rem_dev_file; - } - return &port->ofdev.dev; -out_rem_dev_file: - device_remove_file(&port->ofdev.dev, &dev_attr_log_port_id); out_unreg_of_dev: of_device_unregister(&port->ofdev); out: @@ -2874,7 +2838,6 @@ out: static void ehea_unregister_port(struct ehea_port *port) { - ehea_driver_sysfs_remove(&port->ofdev.dev, &ehea_driver.driver); device_remove_file(&port->ofdev.dev, &dev_attr_log_port_id); of_device_unregister(&port->ofdev); } ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-28 18:24 ` Greg KH @ 2008-01-28 19:22 ` Nathan Lynch 2008-01-28 19:54 ` Greg KH 2008-01-29 10:12 ` Jan-Bernd Themann 0 siblings, 2 replies; 15+ messages in thread From: Nathan Lynch @ 2008-01-28 19:22 UTC (permalink / raw) To: Greg KH Cc: Jan-Bernd Themann, Sudhir Kumar, akpm, linux-kernel, sam, Christoph Raisch Greg KH wrote: > On Fri, Jan 25, 2008 at 01:10:48PM -0600, Nathan Lynch wrote: > > Jan-Bernd Themann wrote: > > > > > > On Thursday 10 January 2008 18:34, Greg KH wrote: > > > > > The structure device_driver(in device.h) has a member struct driver_private which > > > > > contains the member kobj (according to drivers/base/base.h). > > > > > But in device.h struct driver_private has been declared localy and > > > > > neither defined nor included from base.h. > > > > > So my effort to use driver->driver_private->obj also does not work. > > > > > (I am surprised from where do you access the struct device_driver) > > > > > > > > That is because a driver should not be accessing such a field. > > > > > > > > And especially not in this manner, why would this driver be creating a > > > > symlink that has already been created by the driver core? This whole > > > > thing can just be removed with no problems. Can you try just removing > > > > the ehea_driver_sysfs_add and ehea_driver_sysfs_remove functions to > > > > verify this as I don't have the hardware present to test it out. > > > > > > The eHEA driver tries to orginize its sys-entries as close as possible to > > > other ethernet drivers. Each eHEA NIC has multiple ports which is not that > > > common in PCI. This means that each port is represented by a subdirectory > > > which has not the "driver" sys-link, only the root directory has. > > > Some tools expect to have this driver link in each port directory. > > > That is the reason why this link is created manually. > > > > > > Are there any other ways to create this link? > > > > > > This is now broken in mainline... > > > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_add': > > drivers/net/ehea/ehea_main.c:2812: error: 'struct device_driver' has > > no member named 'kobj' > > drivers/net/ehea/ehea_main.c:2815: error: 'struct device_driver' has > > no member named 'kobj' > > drivers/net/ehea/ehea_main.c:2818: error: 'struct device_driver' has > > no member named 'kobj' > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_remove': > > drivers/net/ehea/ehea_main.c:2830: error: 'struct device_driver' has > > no member named 'kobj' > > Does the patch below fix this? That driver should not have been trying > to create symlinks that the driver core has already created for it. Yes, it fixes the build error, by just removing the code that got broken. Jan-Bernd gave a rationale for creating the symlink that didn't really seem to be answered. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-28 19:22 ` Nathan Lynch @ 2008-01-28 19:54 ` Greg KH 2008-01-29 10:12 ` Jan-Bernd Themann 1 sibling, 0 replies; 15+ messages in thread From: Greg KH @ 2008-01-28 19:54 UTC (permalink / raw) To: Nathan Lynch Cc: Jan-Bernd Themann, Sudhir Kumar, akpm, linux-kernel, sam, Christoph Raisch On Mon, Jan 28, 2008 at 01:22:04PM -0600, Nathan Lynch wrote: > Greg KH wrote: > > On Fri, Jan 25, 2008 at 01:10:48PM -0600, Nathan Lynch wrote: > > > Jan-Bernd Themann wrote: > > > > > > > > On Thursday 10 January 2008 18:34, Greg KH wrote: > > > > > > The structure device_driver(in device.h) has a member struct driver_private which > > > > > > contains the member kobj (according to drivers/base/base.h). > > > > > > But in device.h struct driver_private has been declared localy and > > > > > > neither defined nor included from base.h. > > > > > > So my effort to use driver->driver_private->obj also does not work. > > > > > > (I am surprised from where do you access the struct device_driver) > > > > > > > > > > That is because a driver should not be accessing such a field. > > > > > > > > > > And especially not in this manner, why would this driver be creating a > > > > > symlink that has already been created by the driver core? This whole > > > > > thing can just be removed with no problems. Can you try just removing > > > > > the ehea_driver_sysfs_add and ehea_driver_sysfs_remove functions to > > > > > verify this as I don't have the hardware present to test it out. > > > > > > > > The eHEA driver tries to orginize its sys-entries as close as possible to > > > > other ethernet drivers. Each eHEA NIC has multiple ports which is not that > > > > common in PCI. This means that each port is represented by a subdirectory > > > > which has not the "driver" sys-link, only the root directory has. > > > > Some tools expect to have this driver link in each port directory. > > > > That is the reason why this link is created manually. > > > > > > > > Are there any other ways to create this link? > > > > > > > > > This is now broken in mainline... > > > > > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_add': > > > drivers/net/ehea/ehea_main.c:2812: error: 'struct device_driver' has > > > no member named 'kobj' > > > drivers/net/ehea/ehea_main.c:2815: error: 'struct device_driver' has > > > no member named 'kobj' > > > drivers/net/ehea/ehea_main.c:2818: error: 'struct device_driver' has > > > no member named 'kobj' > > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_remove': > > > drivers/net/ehea/ehea_main.c:2830: error: 'struct device_driver' has > > > no member named 'kobj' > > > > Does the patch below fix this? That driver should not have been trying > > to create symlinks that the driver core has already created for it. > > Yes, it fixes the build error, by just removing the code that got > broken. Jan-Bernd gave a rationale for creating the symlink that > didn't really seem to be answered. See my other post to him. I do not see why this is not just duplicating the same exact code in the driver core. If you are trying to "fake out" userspace by saying a device is bound to a driver, well, that's just wrong. thanks, greg k-h ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-28 19:22 ` Nathan Lynch 2008-01-28 19:54 ` Greg KH @ 2008-01-29 10:12 ` Jan-Bernd Themann 2008-01-29 13:23 ` Greg KH 1 sibling, 1 reply; 15+ messages in thread From: Jan-Bernd Themann @ 2008-01-29 10:12 UTC (permalink / raw) To: Nathan Lynch Cc: Greg KH, Sudhir Kumar, akpm, linux-kernel, sam, Christoph Raisch, Jan-Bernd Themann On Monday 28 January 2008 20:22, you wrote: > Greg KH wrote: > > On Fri, Jan 25, 2008 at 01:10:48PM -0600, Nathan Lynch wrote: > > > Jan-Bernd Themann wrote: > > > > > > This is now broken in mainline... > > > > > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_add': > > > drivers/net/ehea/ehea_main.c:2812: error: 'struct device_driver' has > > > no member named 'kobj' > > > drivers/net/ehea/ehea_main.c:2815: error: 'struct device_driver' has > > > no member named 'kobj' > > > drivers/net/ehea/ehea_main.c:2818: error: 'struct device_driver' has > > > no member named 'kobj' > > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_remove': > > > drivers/net/ehea/ehea_main.c:2830: error: 'struct device_driver' has > > > no member named 'kobj' > > > > Does the patch below fix this? That driver should not have been trying > > to create symlinks that the driver core has already created for it. > > Yes, it fixes the build error, by just removing the code that got > broken. Jan-Bernd gave a rationale for creating the symlink that > didn't really seem to be answered. > > > > > The eHEA driver tries to orginize its sys-entries as close as possible to > > > > other ethernet drivers. Each eHEA NIC has multiple ports which is not that > > > > common in PCI. This means that each port is represented by a subdirectory > > > > which has not the "driver" sys-link, only the root directory has. > > > > Some tools expect to have this driver link in each port directory. > > > > That is the reason why this link is created manually. In addition to the explaination above: Just to be sure that we talk about the same thing: The eHEA driver controlls multiple eHEAs which have multiple ethernet ports each. So the logical structure looks like this: eHEA1 ---> port1 (ethX) -> port2 (ethX+1) -> port3 (ethX+2) ... eHEA2 ---> port1 (eth?) -> port2 -> port3 ... This structure is represented in /sys/bus/ibmebus/devices in the same way described above. If you want to determine the driver belonging to an ethX, you would go the following path: /sys/class/net/ethX/device/driver ls /sys/class/net/ethX/device: drwxr-xr-x 2 root root 0 2008-01-29 10:00 . drwxr-xr-x 4 root root 0 2008-01-29 10:00 .. lrwxrwxrwx 1 root root 0 2008-01-29 10:00 bus -> ../../../../bus/ibmebus -r--r--r-- 1 root root 4096 2008-01-29 10:00 devspec lrwxrwxrwx 1 root root 0 2008-01-29 10:00 driver -> ../../../../bus/ibmebus/drivers/ehea ^^^^^ In our case this one is created by the code that does not work any longer. The sym-link is not gereated automatically as the device for portX is added to the eHEA device (as subnode) where the eHEA device is not a bus. If this sym-link is of interest (which I guess is the case as most devices have it) we have to create it somehow. Would the following proposal work? There is an exported kernel function called "device_bind_driver" which creates the same links. However, it does some additional stuff as well and there is currently no "device_unbind_driver" yet. Either "device_unbind_driver" needs to be added or the following two already existing functions could be exported: driver_sysfs_add driver_sysfs_remove Regards, Jan-Bernd & Christoph Raisch ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-29 10:12 ` Jan-Bernd Themann @ 2008-01-29 13:23 ` Greg KH 2008-01-29 14:20 ` Christoph Raisch 0 siblings, 1 reply; 15+ messages in thread From: Greg KH @ 2008-01-29 13:23 UTC (permalink / raw) To: Jan-Bernd Themann Cc: Nathan Lynch, Sudhir Kumar, akpm, linux-kernel, sam, Christoph Raisch, Jan-Bernd Themann On Tue, Jan 29, 2008 at 11:12:40AM +0100, Jan-Bernd Themann wrote: > On Monday 28 January 2008 20:22, you wrote: > > Greg KH wrote: > > > On Fri, Jan 25, 2008 at 01:10:48PM -0600, Nathan Lynch wrote: > > > > Jan-Bernd Themann wrote: > > > > > > > > This is now broken in mainline... > > > > > > > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_add': > > > > drivers/net/ehea/ehea_main.c:2812: error: 'struct device_driver' has > > > > no member named 'kobj' > > > > drivers/net/ehea/ehea_main.c:2815: error: 'struct device_driver' has > > > > no member named 'kobj' > > > > drivers/net/ehea/ehea_main.c:2818: error: 'struct device_driver' has > > > > no member named 'kobj' > > > > drivers/net/ehea/ehea_main.c: In function 'ehea_driver_sysfs_remove': > > > > drivers/net/ehea/ehea_main.c:2830: error: 'struct device_driver' has > > > > no member named 'kobj' > > > > > > Does the patch below fix this? That driver should not have been trying > > > to create symlinks that the driver core has already created for it. > > > > Yes, it fixes the build error, by just removing the code that got > > broken. Jan-Bernd gave a rationale for creating the symlink that > > didn't really seem to be answered. > > > > > > > > The eHEA driver tries to orginize its sys-entries as close as possible to > > > > > other ethernet drivers. Each eHEA NIC has multiple ports which is not that > > > > > common in PCI. This means that each port is represented by a subdirectory > > > > > which has not the "driver" sys-link, only the root directory has. > > > > > Some tools expect to have this driver link in each port directory. > > > > > That is the reason why this link is created manually. > > In addition to the explaination above: > > Just to be sure that we talk about the same thing: > The eHEA driver controlls multiple eHEAs which have multiple > ethernet ports each. So the logical structure looks like this: > eHEA1 ---> port1 (ethX) > -> port2 (ethX+1) > -> port3 (ethX+2) > ... > eHEA2 ---> port1 (eth?) > -> port2 > -> port3 > ... > This structure is represented in /sys/bus/ibmebus/devices in the same way > described above. > > If you want to determine the driver belonging to an ethX, you would go > the following path: > /sys/class/net/ethX/device/driver > > > ls /sys/class/net/ethX/device: > drwxr-xr-x 2 root root 0 2008-01-29 10:00 . > drwxr-xr-x 4 root root 0 2008-01-29 10:00 .. > lrwxrwxrwx 1 root root 0 2008-01-29 10:00 bus -> ../../../../bus/ibmebus > -r--r--r-- 1 root root 4096 2008-01-29 10:00 devspec > lrwxrwxrwx 1 root root 0 2008-01-29 10:00 driver -> ../../../../bus/ibmebus/drivers/ehea > ^^^^^ > In our case this one is created by the code that does not work any longer. > > The sym-link is not gereated automatically as the device for portX is added > to the eHEA device (as subnode) where the eHEA device is not a bus. Then please fix that, no other driver has this kind of problem, right? Are you just passing the wrong "device" to the networking subsystem? > If this sym-link is of interest (which I guess is the case as most devices > have it) we have to create it somehow. Why would you have to do this by hand? What makes this driver so unique in the kernel that it would have to do this? We have lots of other multi-port ethernet drivers today without this issue, right? confused, greg k-h ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-29 13:23 ` Greg KH @ 2008-01-29 14:20 ` Christoph Raisch 2008-02-01 14:37 ` Jan-Bernd Themann 2008-02-07 22:17 ` Greg KH 0 siblings, 2 replies; 15+ messages in thread From: Christoph Raisch @ 2008-01-29 14:20 UTC (permalink / raw) To: Greg KH Cc: akpm, Jan-Bernd Themann, linux-kernel, Nathan Lynch, ossthema, sam, Sudhir Kumar, Joachim Fenkes Greg KH <greg@kroah.com> wrote on 29.01.2008 14:23:09: > On Tue, Jan 29, 2008 at 11:12:40AM +0100, Jan-Bernd Themann wrote: ... > > The sym-link is not gereated automatically as the device for portX is added > > to the eHEA device (as subnode) where the eHEA device is not a bus. > > Then please fix that, no other driver has this kind of problem, right? > Are you just passing the wrong "device" to the networking subsystem? > > > If this sym-link is of interest (which I guess is the case as most devices > > have it) we have to create it somehow. > > Why would you have to do this by hand? What makes this driver so unique > in the kernel that it would have to do this? We have lots of other > multi-port ethernet drivers today without this issue, right? > > confused, > > greg k-h well, the major difference is hea is not PCI. All PCI cards we checked have a 1:1 relationship between PCI function (PCI config space) and a single ethernet port. Even if the same Ethernet chip has two ports, it shows up as two separate adapters from the PCI perspective (two PCI entries in /sys/bus/pci/devices host:/ # ls -l /sys/bus/pci/devices/0000\:c8\:01.0/ total 0 lrwxrwxrwx 1 root root 0 2008-01-28 14:59 bus -> ../../../../bus/pci -r--r--r-- 1 root root 4096 2008-01-28 14:59 class -rw-r--r-- 1 root root 256 2008-01-28 14:59 config -r--r--r-- 1 root root 4096 2008-01-28 14:59 device -r--r--r-- 1 root root 4096 2008-01-29 14:26 devspec lrwxrwxrwx 1 root root 0 2008-01-28 14:59 driver -> ../../../../bus/pci/drivers/e1000 -r--r--r-- 1 root root 4096 2008-01-28 14:59 irq -r--r--r-- 1 root root 4096 2008-01-29 14:26 local_cpus -r--r--r-- 1 root root 4096 2008-01-28 14:59 modalias lrwxrwxrwx 1 root root 0 2008-01-29 14:26 net:eth1 -> ../../../../class/net/eth1 -r--r--r-- 1 root root 4096 2008-01-28 14:59 resource .... host:/ # ls -l /sys/bus/pci/devices/0000\:c8\:01.1/ total 0 lrwxrwxrwx 1 root root 0 2008-01-28 14:59 bus -> ../../../../bus/pci -r--r--r-- 1 root root 4096 2008-01-28 14:59 class -rw-r--r-- 1 root root 256 2008-01-28 14:59 config -r--r--r-- 1 root root 4096 2008-01-28 14:59 device -r--r--r-- 1 root root 4096 2008-01-29 14:29 devspec lrwxrwxrwx 1 root root 0 2008-01-28 14:59 driver -> ../../../../bus/pci/drivers/e1000 -r--r--r-- 1 root root 4096 2008-01-28 14:59 irq -r--r--r-- 1 root root 4096 2008-01-29 14:29 local_cpus -r--r--r-- 1 root root 4096 2008-01-28 14:59 modalias lrwxrwxrwx 1 root root 0 2008-01-29 14:29 net:eth2 -> ../../../../class/net/eth2 ... These pci functions corresponds to a /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port0 and /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port1 The busdriver currently does not find out, how many ports are in a /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1. This is up to the hardware specific driver responsible for ehea or ehca. Think of a PCI card where the PCI busdriver can not determine how many ports are implemented on the card. How should this be mapped to /sys ? Should we try to "flatten" the ports to something like /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1 /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1_port0 /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1_port1 ...which means physical hierarchy information would look a bit strange, but could be the simpler one. The way which corresponds to the hardware would be to improve the kernel in such a way that hierarchical ports also wortk for netdev_register. Then we could keep this structure /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port0 /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port1 So, which way should we try? Gruss / Regards Christoph Raisch ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-29 14:20 ` Christoph Raisch @ 2008-02-01 14:37 ` Jan-Bernd Themann 2008-02-07 22:17 ` Greg KH 1 sibling, 0 replies; 15+ messages in thread From: Jan-Bernd Themann @ 2008-02-01 14:37 UTC (permalink / raw) To: Christoph Raisch Cc: Greg KH, akpm, Jan-Bernd Themann, linux-kernel, Nathan Lynch, ossthema, sam, Sudhir Kumar, Joachim Fenkes On Tuesday 29 January 2008 15:20, Christoph Raisch wrote: > These pci functions corresponds to a > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port0 > and > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port1 > > The busdriver currently does not find out, how many ports are in a > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1. > This is up to the hardware specific driver responsible for ehea or ehca. > Think of a PCI card where the PCI busdriver > can not determine how many ports are implemented on the card. > > How should this be mapped to /sys ? > > Should we try to "flatten" the ports to something like > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1 > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1_port0 > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1_port1 > ...which means physical hierarchy information would look a bit strange, > but could be the simpler one. > > The way which corresponds to the hardware would be to > improve the kernel in such a way that hierarchical ports also wortk for > netdev_register. > Then we could keep this structure > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port0 > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port1 > > > So, which way should we try? > > Gruss / Regards > Christoph Raisch > > > Hi, so far we fould 2 options. The ibmebus manages (add / remove) ONLY eHEA adapters (not ehea ethernet ports). All ethernet ports have to be added / removed by the eHEA device driver when an eHEA adapter has been added by the ibmebus as a new device. This means the sysfs-links "driver" for our eHEA ethernet devices (ports) are not automatically generated. Option 1) - We can create then ourselves. Therefore we would need two functions exported and included in the proper header file: - static int driver_sysfs_add(struct device *dev) - static void driver_sysfs_remove(struct device *dev) Option 2) - we just leave it out which would be inconsistent with other pci based ethernet adapters. So far we prefer option 1. Do you see any other ways we should investigate? To resolve the build issue I've posted a first patch to remove the old sysfs links. Regards, Jan-Bernd & Christoph ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-29 14:20 ` Christoph Raisch 2008-02-01 14:37 ` Jan-Bernd Themann @ 2008-02-07 22:17 ` Greg KH 2008-02-12 15:28 ` Christoph Raisch 1 sibling, 1 reply; 15+ messages in thread From: Greg KH @ 2008-02-07 22:17 UTC (permalink / raw) To: Christoph Raisch Cc: akpm, Jan-Bernd Themann, linux-kernel, Nathan Lynch, ossthema, sam, Sudhir Kumar, Joachim Fenkes On Tue, Jan 29, 2008 at 03:20:20PM +0100, Christoph Raisch wrote: > Greg KH <greg@kroah.com> wrote on 29.01.2008 14:23:09: > > > On Tue, Jan 29, 2008 at 11:12:40AM +0100, Jan-Bernd Themann wrote: > ... > > > The sym-link is not gereated automatically as the device for portX is > added > > > to the eHEA device (as subnode) where the eHEA device is not a bus. > > > > Then please fix that, no other driver has this kind of problem, right? > > Are you just passing the wrong "device" to the networking subsystem? > > > > > If this sym-link is of interest (which I guess is the case as most > devices > > > have it) we have to create it somehow. > > > > Why would you have to do this by hand? What makes this driver so unique > > in the kernel that it would have to do this? We have lots of other > > multi-port ethernet drivers today without this issue, right? > > > > confused, > > > > greg k-h > > well, the major difference is hea is not PCI. What is it? It has to live on some kind of bus, right? > All PCI cards we checked have a 1:1 relationship between PCI function (PCI > config space) and a single ethernet port. > Even if the same Ethernet chip has two ports, it shows up as two separate > adapters from the PCI perspective (two PCI entries in /sys/bus/pci/devices > > host:/ # ls -l /sys/bus/pci/devices/0000\:c8\:01.0/ > total 0 > lrwxrwxrwx 1 root root 0 2008-01-28 14:59 bus -> ../../../../bus/pci > -r--r--r-- 1 root root 4096 2008-01-28 14:59 class > -rw-r--r-- 1 root root 256 2008-01-28 14:59 config > -r--r--r-- 1 root root 4096 2008-01-28 14:59 device > -r--r--r-- 1 root root 4096 2008-01-29 14:26 devspec > lrwxrwxrwx 1 root root 0 2008-01-28 14:59 driver -> > ../../../../bus/pci/drivers/e1000 > -r--r--r-- 1 root root 4096 2008-01-28 14:59 irq > -r--r--r-- 1 root root 4096 2008-01-29 14:26 local_cpus > -r--r--r-- 1 root root 4096 2008-01-28 14:59 modalias > lrwxrwxrwx 1 root root 0 2008-01-29 14:26 net:eth1 -> > ../../../../class/net/eth1 > -r--r--r-- 1 root root 4096 2008-01-28 14:59 resource > .... > host:/ # ls -l /sys/bus/pci/devices/0000\:c8\:01.1/ > total 0 > lrwxrwxrwx 1 root root 0 2008-01-28 14:59 bus -> ../../../../bus/pci > -r--r--r-- 1 root root 4096 2008-01-28 14:59 class > -rw-r--r-- 1 root root 256 2008-01-28 14:59 config > -r--r--r-- 1 root root 4096 2008-01-28 14:59 device > -r--r--r-- 1 root root 4096 2008-01-29 14:29 devspec > lrwxrwxrwx 1 root root 0 2008-01-28 14:59 driver -> > ../../../../bus/pci/drivers/e1000 > -r--r--r-- 1 root root 4096 2008-01-28 14:59 irq > -r--r--r-- 1 root root 4096 2008-01-29 14:29 local_cpus > -r--r--r-- 1 root root 4096 2008-01-28 14:59 modalias > lrwxrwxrwx 1 root root 0 2008-01-29 14:29 net:eth2 -> > ../../../../class/net/eth2 > ... > > These pci functions corresponds to a > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port0 > and > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port1 > > The busdriver currently does not find out, how many ports are in a > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1. > This is up to the hardware specific driver responsible for ehea or ehca. > Think of a PCI card where the PCI busdriver > can not determine how many ports are implemented on the card. > > How should this be mapped to /sys ? > > Should we try to "flatten" the ports to something like > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1 > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1_port0 > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1_port1 > ...which means physical hierarchy information would look a bit strange, > but could be the simpler one. No. Why have a separate "port" device for every ethernet port? What keeps you from just creating the different network devices for your device, and pointing the parent to the same 789D.001.XXXXXX-P1 device? Lots of PCI devices hang "class devices" off of them all the time, why would this be any different from that? I think you all are trying to make this more complex than it really is :) thanks, greg k-h ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-02-07 22:17 ` Greg KH @ 2008-02-12 15:28 ` Christoph Raisch 0 siblings, 0 replies; 15+ messages in thread From: Christoph Raisch @ 2008-02-12 15:28 UTC (permalink / raw) To: Greg KH Cc: akpm, Jan-Bernd Themann, Joachim Fenkes, linux-kernel, Nathan Lynch, ossthema, sam, Sudhir Kumar Greg KH <greg@kroah.com> wrote on 07.02.2008 23:17:12: > On Tue, Jan 29, 2008 at 03:20:20PM +0100, Christoph Raisch wrote: > What is it? It has to live on some kind of bus, right? It is a piece of hardware with a firmware/hypervisor abstraction layer on top. The hypervisor provides virtualization interfaces to add and remove ethernet adapters and ports. Each port is represented in the open firmware device tree (OFDT) as a subnode of the ehea adapter node. System P has a userspace DLPAR application communicating with firmware, the kernel, and the hardware management console to change all that on the flight. This tool needs a capability to identify which open firmware device tree entry belongs to which ethernet device. Each node created by the ibmebus driver has a devspec entry associated to the device node in OFDT, used by the DLPAR application. Each port created by the ibmebus driver has a devspec entry associated to the port node in OFDT, used by the DLPAR application. > > > > host:/ # ls -l /sys/bus/pci/devices/0000\:c8\:01.0/ > > total 0 ... > > -r--r--r-- 1 root root 4096 2008-01-29 14:26 devspec ... > > > > These pci functions corresponds to a > > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port0 > > and > > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1/port1 > > > > The busdriver currently does not find out, how many ports are in a > > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1. > > This is up to the hardware specific driver responsible for ehea or ehca. > > Think of a PCI card where the PCI busdriver > > can not determine how many ports are implemented on the card. > > > > How should this be mapped to /sys ? > > > > Should we try to "flatten" the ports to something like > > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1 > > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1_port0 > > /sys/bus/ibmebus/devices/789D.001.XXXXXX-P1_port1 > > ...which means physical hierarchy information would look a bit strange, > > but could be the simpler one. > > No. Why have a separate "port" device for every ethernet port? What > keeps you from just creating the different network devices for your > device, and pointing the parent to the same 789D.001.XXXXXX-P1 device? > > > I think you all are trying to make this more complex than it really is > :) If you register multiple netdevs in a ehea adapter node, how is it possible to find out which ethXXX belongs to which devspec port entry in the OFDT? Is there a simpler way than the one we chose to get this in addition? > > thanks, > > greg k-h Gruss / Regards Christoph Raisch ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c 2008-01-18 9:16 ` Jan-Bernd Themann 2008-01-25 19:10 ` Nathan Lynch @ 2008-01-28 18:25 ` Greg KH 1 sibling, 0 replies; 15+ messages in thread From: Greg KH @ 2008-01-28 18:25 UTC (permalink / raw) To: Jan-Bernd Themann; +Cc: Sudhir Kumar, akpm, linux-kernel, sam, Christoph Raisch On Fri, Jan 18, 2008 at 10:16:48AM +0100, Jan-Bernd Themann wrote: > Hi, > > sorry for answering so late, I'm only tracking netdev and ppc mailing list. > > On Thursday 10 January 2008 18:34, Greg KH wrote: > > > The structure device_driver(in device.h) has a member struct driver_private which > > > contains the member kobj (according to drivers/base/base.h). > > > But in device.h struct driver_private has been declared localy and > > > neither defined nor included from base.h. > > > So my effort to use driver->driver_private->obj also does not work. > > > (I am surprised from where do you access the struct device_driver) > > > > That is because a driver should not be accessing such a field. > > > > And especially not in this manner, why would this driver be creating a > > symlink that has already been created by the driver core? This whole > > thing can just be removed with no problems. Can you try just removing > > the ehea_driver_sysfs_add and ehea_driver_sysfs_remove functions to > > verify this as I don't have the hardware present to test it out. > > The eHEA driver tries to orginize its sys-entries as close as possible to > other ethernet drivers. Each eHEA NIC has multiple ports which is not that > common in PCI. This means that each port is represented by a subdirectory > which has not the "driver" sys-link, only the root directory has. > Some tools expect to have this driver link in each port directory. > That is the reason why this link is created manually. > > Are there any other ways to create this link? The driver core already creates this link for you. Don't try to duplicate what is already there for you. It should just be a matter of deleting the code, and everything should be fine. See the patch that I just sent. thanks, greg k-h ^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2008-02-12 16:03 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-01-08 16:33 [2.6.24-rc6-mm1]Build failure in drivers/net/ehea/ehea_main.c Sudhir Kumar 2008-01-10 17:34 ` Greg KH 2008-01-18 9:16 ` Jan-Bernd Themann 2008-01-25 19:10 ` Nathan Lynch 2008-01-28 18:21 ` Greg KH 2008-01-28 18:24 ` Greg KH 2008-01-28 19:22 ` Nathan Lynch 2008-01-28 19:54 ` Greg KH 2008-01-29 10:12 ` Jan-Bernd Themann 2008-01-29 13:23 ` Greg KH 2008-01-29 14:20 ` Christoph Raisch 2008-02-01 14:37 ` Jan-Bernd Themann 2008-02-07 22:17 ` Greg KH 2008-02-12 15:28 ` Christoph Raisch 2008-01-28 18:25 ` Greg KH
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox