ehea: fix for dynamic lpar support
Subsystems (2)
PATCH 1/2 ehea: fix for dynamic lpar support
The patch fixes bugs related to the probe / remove adapter functionality (handling of OFDT nodes)
Signed-off-by Jan-Bernd Themann <[email protected]>
---
This patch applies on top of the netdev upstream branch for 2.6.22
drivers/net/ehea/ehea.h +1 -1
@@ -39,7 +39,7 @@ #include <asm/abs_addr.h>#include <asm/io.h> #define DRV_NAME "ehea" -#define DRV_VERSION "EHEA_0052" +#define DRV_VERSION "EHEA_0053"#define EHEA_MSG_DEFAULT (NETIF_MSG_LINK | NETIF_MSG_TIMER \ | NETIF_MSG_RX_ERR | NETIF_MSG_TX_ERR)
drivers/net/ehea/ehea_main.c +19 -20
@@ -2556,11 +2556,8 @@ static int ehea_setup_ports(struct ehea_int i =0 ; lhea_dn = adapter->ebus_dev->ofdev.node; - do { - eth_dn = of_get_next_child(lhea_dn, eth_dn); - if (!eth_dn) - break; - +while ((eth_dn =of_get_next_child (lhea_dn, eth_dn))) { + dn_log_port_id = (u32 *)get_property (eth_dn,"ibm,hea-port-no" ,NULL );if (!dn_log_port_id) {
@@ -2577,9 +2574,7 @@ static int ehea_setup_ports(struct ehea_ adapter->port[i]->netdev->name, *dn_log_port_id); i++; - }while (eth_dn); - -of_node_put (lhea_dn); + };/* Check for succesfully set up ports */ for (i =0 ; i <EHEA_MAX_PORTS ; i++)
@@ -2600,21 +2595,14 @@ static struct device_node *ehea_get_eth_u32 *dn_log_port_id; lhea_dn = adapter->ebus_dev->ofdev.node; -do { - eth_dn =of_get_next_child (lhea_dn, eth_dn); -if (!eth_dn) -break ; - +while ((eth_dn =of_get_next_child (lhea_dn, eth_dn))) { + dn_log_port_id = (u32 *)get_property (eth_dn,"ibm,hea-port-no" ,NULL ); -if (dn_log_port_id)if (*dn_log_port_id == logical_port_id)return eth_dn; - - }while (eth_dn); - -of_node_put (lhea_dn); + };return NULL ; }
@@ -2650,6 +2638,8 @@ static ssize_t ehea_probe_port(struct de port =ehea_setup_single_port (adapter, logical_port_id, eth_dn); +of_node_put (eth_dn); +if (port) {for (i=0 ; i <EHEA_MAX_PORTS ; i++)if (!adapter->port[i]) {
@@ -2725,6 +2715,11 @@ static int __devinit ehea_probe_adapter(u64 *adapter_handle;int ret; +if (!dev || !dev->ofdev.node) { +ehea_error ("Invalid ibmebus device probed" ); +return -EINVAL ; + } + adapter =kzalloc (sizeof (*adapter),GFP_KERNEL );if (!adapter) { ret = -ENOMEM ;
@@ -2767,6 +2762,7 @@ static int __devinit ehea_probe_adapter( adapter->neq =ehea_create_eq (adapter,EHEA_NEQ ,EHEA_MAX_ENTRIES_EQ ,1 );if (!adapter->neq) { + ret = -EIO ;dev_err (&dev->ofdev.dev,"NEQ creation failed" ); goto out_free_res; }
@@ -2783,10 +2779,13 @@ static int __devinit ehea_probe_adapter( } adapter->ehea_wq =create_workqueue ("ehea_wq" ); -if (!adapter->ehea_wq) +if (!adapter->ehea_wq) { + ret = -EIO ; goto out_free_irq; + } -if (ehea_create_device_sysfs (dev)) + ret =ehea_create_device_sysfs (dev); +if (ret) goto out_kill_wq; ret =ehea_setup_ports (adapter);
Quoted 4 lines · Jan-Bernd Themann
The patch fixes bugs related to the probe / remove adapter functionality (handling of OFDT nodes)
Signed-off-by Jan-Bernd Themann <[email protected]>
applied 1-2