Re: [PATCH 1/2] ibmebus: dynamic add/remove, uevent, root device and whitespace
Looks great! Signed-off-by: Joachim Fenkes <[EMAIL PROTECTED]> Acked-by: John Rose <[EMAIL PROTECTED]> - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 1/2] ibmebus: dynamic add/remove, uevent, root device and whitespace
Looks great! Signed-off-by: Joachim Fenkes [EMAIL PROTECTED] Acked-by: John Rose [EMAIL PROTECTED] - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 1/2] ibmebus: dynamic add/remove, uevent, root device and whitespace
The first part of this patch summarizes the patches of the previous days, namely: - Add dynamic addition/removal of adapters (with spiffy error reporting) - Implement the uevent interface using Sylvain's generic function - Base fake root device on device instead of of_device The first part will apply against the vanilla 2.6.20 source. The second part is just a whitespace fix and applies on top of the first. If nobody objects, I deem these patches ready for inclusion. Signed-off-by: Joachim Fenkes <[EMAIL PROTECTED]> --- arch/powerpc/kernel/ibmebus.c | 129 ++ include/asm-powerpc/ibmebus.h |2 diff -wurp a/arch/powerpc/kernel/ibmebus.c b/arch/powerpc/kernel/ibmebus.c --- a/arch/powerpc/kernel/ibmebus.c 2007-02-22 05:26:24.971939672 +0100 +++ b/arch/powerpc/kernel/ibmebus.c 2007-02-20 23:31:39.0 +0100 @@ -2,6 +2,7 @@ * IBM PowerPC IBM eBus Infrastructure Support. * * Copyright (c) 2005 IBM Corporation + * Joachim Fenkes <[EMAIL PROTECTED]> * Heiko J Schick <[EMAIL PROTECTED]> * * All rights reserved. @@ -43,10 +44,8 @@ #include #include -static struct ibmebus_dev ibmebus_bus_device = { /* fake "parent" device */ - .name = ibmebus_bus_device.ofdev.dev.bus_id, - .ofdev.dev.bus_id = "ibmebus", - .ofdev.dev.bus= _bus_type, +static struct device ibmebus_bus_device = { /* fake "parent" device */ + .bus_id = "ibmebus", }; static void *ibmebus_alloc_coherent(struct device *dev, @@ -161,18 +160,19 @@ static void __devinit ibmebus_dev_releas static ssize_t ibmebusdev_show_name(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, "%s\n", to_ibmebus_dev(dev)->name); + struct ibmebus_dev *ebus_dev = to_ibmebus_dev(dev); + char *name = (char*)get_property(ebus_dev->ofdev.node, "name", NULL); + return sprintf(buf, "%s\n", name); } static DEVICE_ATTR(name, S_IRUSR | S_IRGRP | S_IROTH, ibmebusdev_show_name, NULL); -static struct ibmebus_dev* __devinit ibmebus_register_device_common( +static int __devinit ibmebus_register_device_common( struct ibmebus_dev *dev, const char *name) { int err = 0; - dev->name = name; - dev->ofdev.dev.parent = _bus_device.ofdev.dev; + dev->ofdev.dev.parent = _bus_device; dev->ofdev.dev.bus = _bus_type; dev->ofdev.dev.release = ibmebus_dev_release; @@ -186,12 +186,12 @@ static struct ibmebus_dev* __devinit ibm if ((err = of_device_register(>ofdev)) != 0) { printk(KERN_ERR "%s: failed to register device (%d).\n", __FUNCTION__, err); - return NULL; + return -ENODEV; } device_create_file(>ofdev.dev, _attr_name); - return dev; + return 0; } static struct ibmebus_dev* __devinit ibmebus_register_device_node( @@ -205,18 +205,18 @@ static struct ibmebus_dev* __devinit ibm if (!loc_code) { printk(KERN_WARNING "%s: node %s missing 'ibm,loc-code'\n", __FUNCTION__, dn->name ? dn->name : ""); - return NULL; + return ERR_PTR(-EINVAL); } if (strlen(loc_code) == 0) { printk(KERN_WARNING "%s: 'ibm,loc-code' is invalid\n", __FUNCTION__); - return NULL; + return ERR_PTR(-EINVAL); } dev = kzalloc(sizeof(struct ibmebus_dev), GFP_KERNEL); if (!dev) { - return NULL; + return ERR_PTR(-ENOMEM); } dev->ofdev.node = of_node_get(dn); @@ -227,9 +227,9 @@ static struct ibmebus_dev* __devinit ibm min(length, BUS_ID_SIZE - 1)); /* Register with generic device framework. */ - if (ibmebus_register_device_common(dev, dn->name) == NULL) { + if (ibmebus_register_device_common(dev, dn->name) != 0) { kfree(dev); - return NULL; + return ERR_PTR(-ENODEV); } return dev; @@ -240,9 +240,8 @@ static void ibmebus_probe_of_nodes(char* struct device_node *dn = NULL; while ((dn = of_find_node_by_name(dn, name))) { - if (ibmebus_register_device_node(dn) == NULL) { + if (IS_ERR(ibmebus_register_device_node(dn))) { of_node_put(dn); - return; } } @@ -262,9 +261,15 @@ static void ibmebus_add_devices_by_id(st return; } -static int ibmebus_match_helper(struct device *dev, void *data) +static int ibmebus_match_helper_name(struct device *dev, void *data) { - if (strcmp((char*)data, to_ibmebus_dev(dev)->name) == 0) + const struct ibmebus_dev *ebus_dev = to_ibmebus_dev(dev); + char *name; + + name =
[PATCH 1/2] ibmebus: dynamic add/remove, uevent, root device and whitespace
The first part of this patch summarizes the patches of the previous days, namely: - Add dynamic addition/removal of adapters (with spiffy error reporting) - Implement the uevent interface using Sylvain's generic function - Base fake root device on device instead of of_device The first part will apply against the vanilla 2.6.20 source. The second part is just a whitespace fix and applies on top of the first. If nobody objects, I deem these patches ready for inclusion. Signed-off-by: Joachim Fenkes [EMAIL PROTECTED] --- arch/powerpc/kernel/ibmebus.c | 129 ++ include/asm-powerpc/ibmebus.h |2 diff -wurp a/arch/powerpc/kernel/ibmebus.c b/arch/powerpc/kernel/ibmebus.c --- a/arch/powerpc/kernel/ibmebus.c 2007-02-22 05:26:24.971939672 +0100 +++ b/arch/powerpc/kernel/ibmebus.c 2007-02-20 23:31:39.0 +0100 @@ -2,6 +2,7 @@ * IBM PowerPC IBM eBus Infrastructure Support. * * Copyright (c) 2005 IBM Corporation + * Joachim Fenkes [EMAIL PROTECTED] * Heiko J Schick [EMAIL PROTECTED] * * All rights reserved. @@ -43,10 +44,8 @@ #include asm/ibmebus.h #include asm/abs_addr.h -static struct ibmebus_dev ibmebus_bus_device = { /* fake parent device */ - .name = ibmebus_bus_device.ofdev.dev.bus_id, - .ofdev.dev.bus_id = ibmebus, - .ofdev.dev.bus= ibmebus_bus_type, +static struct device ibmebus_bus_device = { /* fake parent device */ + .bus_id = ibmebus, }; static void *ibmebus_alloc_coherent(struct device *dev, @@ -161,18 +160,19 @@ static void __devinit ibmebus_dev_releas static ssize_t ibmebusdev_show_name(struct device *dev, struct device_attribute *attr, char *buf) { - return sprintf(buf, %s\n, to_ibmebus_dev(dev)-name); + struct ibmebus_dev *ebus_dev = to_ibmebus_dev(dev); + char *name = (char*)get_property(ebus_dev-ofdev.node, name, NULL); + return sprintf(buf, %s\n, name); } static DEVICE_ATTR(name, S_IRUSR | S_IRGRP | S_IROTH, ibmebusdev_show_name, NULL); -static struct ibmebus_dev* __devinit ibmebus_register_device_common( +static int __devinit ibmebus_register_device_common( struct ibmebus_dev *dev, const char *name) { int err = 0; - dev-name = name; - dev-ofdev.dev.parent = ibmebus_bus_device.ofdev.dev; + dev-ofdev.dev.parent = ibmebus_bus_device; dev-ofdev.dev.bus = ibmebus_bus_type; dev-ofdev.dev.release = ibmebus_dev_release; @@ -186,12 +186,12 @@ static struct ibmebus_dev* __devinit ibm if ((err = of_device_register(dev-ofdev)) != 0) { printk(KERN_ERR %s: failed to register device (%d).\n, __FUNCTION__, err); - return NULL; + return -ENODEV; } device_create_file(dev-ofdev.dev, dev_attr_name); - return dev; + return 0; } static struct ibmebus_dev* __devinit ibmebus_register_device_node( @@ -205,18 +205,18 @@ static struct ibmebus_dev* __devinit ibm if (!loc_code) { printk(KERN_WARNING %s: node %s missing 'ibm,loc-code'\n, __FUNCTION__, dn-name ? dn-name : unknown); - return NULL; + return ERR_PTR(-EINVAL); } if (strlen(loc_code) == 0) { printk(KERN_WARNING %s: 'ibm,loc-code' is invalid\n, __FUNCTION__); - return NULL; + return ERR_PTR(-EINVAL); } dev = kzalloc(sizeof(struct ibmebus_dev), GFP_KERNEL); if (!dev) { - return NULL; + return ERR_PTR(-ENOMEM); } dev-ofdev.node = of_node_get(dn); @@ -227,9 +227,9 @@ static struct ibmebus_dev* __devinit ibm min(length, BUS_ID_SIZE - 1)); /* Register with generic device framework. */ - if (ibmebus_register_device_common(dev, dn-name) == NULL) { + if (ibmebus_register_device_common(dev, dn-name) != 0) { kfree(dev); - return NULL; + return ERR_PTR(-ENODEV); } return dev; @@ -240,9 +240,8 @@ static void ibmebus_probe_of_nodes(char* struct device_node *dn = NULL; while ((dn = of_find_node_by_name(dn, name))) { - if (ibmebus_register_device_node(dn) == NULL) { + if (IS_ERR(ibmebus_register_device_node(dn))) { of_node_put(dn); - return; } } @@ -262,9 +261,15 @@ static void ibmebus_add_devices_by_id(st return; } -static int ibmebus_match_helper(struct device *dev, void *data) +static int ibmebus_match_helper_name(struct device *dev, void *data) { - if (strcmp((char*)data, to_ibmebus_dev(dev)-name) == 0) + const struct ibmebus_dev *ebus_dev = to_ibmebus_dev(dev); + char *name; +