Merge master.kernel.org:/pub/scm/linux/kernel/git/lethal/sh-2.6
[pandora-kernel.git] / drivers / net / ehea / ehea_main.c
index 263d1c5..83fa32f 100644 (file)
@@ -92,7 +92,7 @@ static struct net_device_stats *ehea_get_stats(struct net_device *dev)
 
        memset(stats, 0, sizeof(*stats));
 
-       cb2 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb2 = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb2) {
                ehea_error("no mem for cb2");
                goto out;
@@ -536,16 +536,14 @@ void ehea_send_irq_tasklet(unsigned long data)
                tasklet_hi_schedule(&pr->send_comp_task);
 }
 
-static irqreturn_t ehea_send_irq_handler(int irq, void *param,
-                                        struct pt_regs *regs)
+static irqreturn_t ehea_send_irq_handler(int irq, void *param)
 {
        struct ehea_port_res *pr = param;
        tasklet_hi_schedule(&pr->send_comp_task);
        return IRQ_HANDLED;
 }
 
-static irqreturn_t ehea_recv_irq_handler(int irq, void *param,
-                                        struct pt_regs *regs)
+static irqreturn_t ehea_recv_irq_handler(int irq, void *param)
 {
        struct ehea_port_res *pr = param;
        struct ehea_port *port = pr->port;
@@ -553,8 +551,7 @@ static irqreturn_t ehea_recv_irq_handler(int irq, void *param,
        return IRQ_HANDLED;
 }
 
-static irqreturn_t ehea_qp_aff_irq_handler(int irq, void *param,
-                                          struct pt_regs *regs)
+static irqreturn_t ehea_qp_aff_irq_handler(int irq, void *param)
 {
        struct ehea_port *port = param;
        struct ehea_eqe *eqe;
@@ -589,8 +586,8 @@ int ehea_sense_port_attr(struct ehea_port *port)
        u64 hret;
        struct hcp_ehea_port_cb0 *cb0;
 
-       cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
-       if (!cb0) {
+       cb0 = kzalloc(PAGE_SIZE, GFP_ATOMIC);   /* May be called via */
+       if (!cb0) {                             /* ehea_neq_tasklet() */
                ehea_error("no mem for cb0");
                ret = -ENOMEM;
                goto out;
@@ -673,7 +670,7 @@ int ehea_set_portspeed(struct ehea_port *port, u32 port_speed)
        u64 hret;
        int ret = 0;
 
-       cb4 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb4 = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb4) {
                ehea_error("no mem for cb4");
                ret = -ENOMEM;
@@ -768,8 +765,7 @@ static void ehea_parse_eqe(struct ehea_adapter *adapter, u64 eqe)
 
                if (EHEA_BMASK_GET(NEQE_PORT_UP, eqe)) {
                        if (!netif_carrier_ok(port->netdev)) {
-                               ret = ehea_sense_port_attr(
-                                       adapter->port[portnum]);
+                               ret = ehea_sense_port_attr(port);
                                if (ret) {
                                        ehea_error("failed resensing port "
                                                   "attributes");
@@ -821,7 +817,7 @@ static void ehea_parse_eqe(struct ehea_adapter *adapter, u64 eqe)
                netif_stop_queue(port->netdev);
                break;
        default:
-               ehea_error("unknown event code %x", ec);
+               ehea_error("unknown event code %x, eqe=0x%lX", ec, eqe);
                break;
        }
 }
@@ -850,8 +846,7 @@ static void ehea_neq_tasklet(unsigned long data)
                            adapter->neq->fw_handle, event_mask);
 }
 
-static irqreturn_t ehea_interrupt_neq(int irq, void *param,
-                                     struct pt_regs *regs)
+static irqreturn_t ehea_interrupt_neq(int irq, void *param)
 {
        struct ehea_adapter *adapter = param;
        tasklet_hi_schedule(&adapter->neq_tasklet);
@@ -990,7 +985,7 @@ static int ehea_configure_port(struct ehea_port *port)
        struct hcp_ehea_port_cb0 *cb0;
 
        ret = -ENOMEM;
-       cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb0)
                goto out;
 
@@ -1448,7 +1443,7 @@ static int ehea_set_mac_addr(struct net_device *dev, void *sa)
                goto out;
        }
 
-       cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb0) {
                ehea_error("no mem for cb0");
                ret = -ENOMEM;
@@ -1506,7 +1501,7 @@ static void ehea_promiscuous(struct net_device *dev, int enable)
        if ((enable && port->promisc) || (!enable && !port->promisc))
                return;
 
-       cb7 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb7 = kzalloc(PAGE_SIZE, GFP_ATOMIC);
        if (!cb7) {
                ehea_error("no mem for cb7");
                goto out;
@@ -1610,7 +1605,7 @@ static void ehea_add_multicast_entry(struct ehea_port* port, u8* mc_mac_addr)
        struct ehea_mc_list *ehea_mcl_entry;
        u64 hret;
 
-       ehea_mcl_entry = kzalloc(sizeof(*ehea_mcl_entry), GFP_KERNEL);
+       ehea_mcl_entry = kzalloc(sizeof(*ehea_mcl_entry), GFP_ATOMIC);
        if (!ehea_mcl_entry) {
                ehea_error("no mem for mcl_entry");
                return;
@@ -1845,7 +1840,7 @@ static int ehea_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
        if (netif_msg_tx_queued(port)) {
                ehea_info("post swqe on QP %d", pr->qp->init_attr.qp_nr);
-               ehea_dump(swqe, sizeof(*swqe), "swqe");
+               ehea_dump(swqe, 512, "swqe");
        }
 
        ehea_post_swqe(pr->qp, swqe);
@@ -1875,7 +1870,7 @@ static void ehea_vlan_rx_register(struct net_device *dev,
 
        port->vgrp = grp;
 
-       cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb1) {
                ehea_error("no mem for cb1");
                goto out;
@@ -1904,7 +1899,7 @@ static void ehea_vlan_rx_add_vid(struct net_device *dev, unsigned short vid)
        int index;
        u64 hret;
 
-       cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb1) {
                ehea_error("no mem for cb1");
                goto out;
@@ -1940,7 +1935,7 @@ static void ehea_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
        if (port->vgrp)
                port->vgrp->vlan_devices[vid] = NULL;
 
-       cb1 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb1 = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb1) {
                ehea_error("no mem for cb1");
                goto out;
@@ -1973,7 +1968,7 @@ int ehea_activate_qp(struct ehea_adapter *adapter, struct ehea_qp *qp)
        u64 dummy64 = 0;
        struct hcp_modify_qp_cb0* cb0;
 
-       cb0 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb0 = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb0) {
                ret = -ENOMEM;
                goto out;
@@ -2229,11 +2224,12 @@ static int ehea_stop(struct net_device *dev)
        return ret;
 }
 
-static void ehea_reset_port(void *data)
+static void ehea_reset_port(struct work_struct *work)
 {
        int ret;
-       struct net_device *dev = data;
-       struct ehea_port *port = netdev_priv(dev);
+       struct ehea_port *port =
+               container_of(work, struct ehea_port, reset_task);
+       struct net_device *dev = port->netdev;
 
        port->resets++;
        down(&port->port_lock);
@@ -2274,7 +2270,7 @@ int ehea_sense_adapter_attr(struct ehea_adapter *adapter)
        u64 hret;
        int ret;
 
-       cb = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb) {
                ret = -ENOMEM;
                goto out;
@@ -2345,7 +2341,7 @@ static int ehea_setup_single_port(struct ehea_port *port,
                goto out;
 
        /* Enable Jumbo frames */
-       cb4 = kzalloc(H_CB_ALIGNMENT, GFP_KERNEL);
+       cb4 = kzalloc(PAGE_SIZE, GFP_KERNEL);
        if (!cb4) {
                ehea_error("no mem for cb4");
        } else {
@@ -2384,7 +2380,7 @@ static int ehea_setup_single_port(struct ehea_port *port,
        dev->tx_timeout = &ehea_tx_watchdog;
        dev->watchdog_timeo = EHEA_WATCH_DOG_TIMEOUT;
 
-       INIT_WORK(&port->reset_task, ehea_reset_port, dev);
+       INIT_WORK(&port->reset_task, ehea_reset_port);
 
        ehea_set_ethtool_ops(dev);