cxgb3 - Fix dev->priv usage

cxgb3 used netdev_priv() and dev->priv for different purposes.
In 2.6.23, netdev_priv() == dev->priv, cxgb3 needs a fix.
This patch is a partial backport of Dave Miller's changes in the
net-2.6.24 git branch.

Without this fix, cxgb3 crashes on 2.6.23.

Signed-off-by: Divy Le Ray <divy@chelsio.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Divy Le Ray and committed by Jeff Garzik 5fbf816f 54d0f56e

+105 -69
+1 -1
drivers/infiniband/hw/cxgb3/cxio_hal.c
··· 916 PDBG("%s opening rnic dev %s\n", __FUNCTION__, rdev_p->dev_name); 917 memset(&rdev_p->ctrl_qp, 0, sizeof(rdev_p->ctrl_qp)); 918 if (!rdev_p->t3cdev_p) 919 - rdev_p->t3cdev_p = T3CDEV(netdev_p); 920 rdev_p->t3cdev_p->ulp = (void *) rdev_p; 921 err = rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, RDMA_GET_PARAMS, 922 &(rdev_p->rnic_info));
··· 916 PDBG("%s opening rnic dev %s\n", __FUNCTION__, rdev_p->dev_name); 917 memset(&rdev_p->ctrl_qp, 0, sizeof(rdev_p->ctrl_qp)); 918 if (!rdev_p->t3cdev_p) 919 + rdev_p->t3cdev_p = dev2t3cdev(netdev_p); 920 rdev_p->t3cdev_p->ulp = (void *) rdev_p; 921 err = rdev_p->t3cdev_p->ctl(rdev_p->t3cdev_p, RDMA_GET_PARAMS, 922 &(rdev_p->rnic_info));
+2
drivers/net/cxgb3/adapter.h
··· 50 51 struct vlan_group; 52 53 struct port_info { 54 struct vlan_group *vlan_grp; 55 const struct port_type_info *port_type; 56 u8 port_id;
··· 50 51 struct vlan_group; 52 53 + struct adapter; 54 struct port_info { 55 + struct adapter *adapter; 56 struct vlan_group *vlan_grp; 57 const struct port_type_info *port_type; 58 u8 port_id;
+72 -54
drivers/net/cxgb3/cxgb3_main.c
··· 358 359 for (j = 0; j < pi->nqsets - 1; j++) { 360 if (!adap->dummy_netdev[dummy_idx]) { 361 - nd = alloc_netdev(0, "", ether_setup); 362 if (!nd) 363 goto free_all; 364 365 - nd->priv = adap; 366 nd->weight = 64; 367 set_bit(__LINK_STATE_START, &nd->state); 368 adap->dummy_netdev[dummy_idx] = nd; ··· 485 #define CXGB3_SHOW(name, val_expr) \ 486 static ssize_t format_##name(struct net_device *dev, char *buf) \ 487 { \ 488 - struct adapter *adap = dev->priv; \ 489 return sprintf(buf, "%u\n", val_expr); \ 490 } \ 491 static ssize_t show_##name(struct device *d, struct device_attribute *attr, \ ··· 497 498 static ssize_t set_nfilters(struct net_device *dev, unsigned int val) 499 { 500 - struct adapter *adap = dev->priv; 501 int min_tids = is_offload(adap) ? MC5_MIN_TIDS : 0; 502 503 if (adap->flags & FULL_INIT_DONE) ··· 520 521 static ssize_t set_nservers(struct net_device *dev, unsigned int val) 522 { 523 - struct adapter *adap = dev->priv; 524 525 if (adap->flags & FULL_INIT_DONE) 526 return -EBUSY; ··· 562 static ssize_t tm_attr_show(struct device *d, struct device_attribute *attr, 563 char *buf, int sched) 564 { 565 - ssize_t len; 566 unsigned int v, addr, bpt, cpt; 567 - struct adapter *adap = to_net_dev(d)->priv; 568 569 addr = A_TP_TX_MOD_Q1_Q0_RATE_LIMIT - sched / 2; 570 rtnl_lock(); ··· 588 static ssize_t tm_attr_store(struct device *d, struct device_attribute *attr, 589 const char *buf, size_t len, int sched) 590 { 591 char *endp; 592 ssize_t ret; 593 - unsigned int val; 594 - struct adapter *adap = to_net_dev(d)->priv; 595 596 if (!capable(CAP_NET_ADMIN)) 597 return -EPERM; ··· 866 867 static int offload_open(struct net_device *dev) 868 { 869 - struct adapter *adapter = dev->priv; 870 - struct t3cdev *tdev = T3CDEV(dev); 871 int adap_up = adapter->open_device_map & PORT_MASK; 872 int err = 0; 873 ··· 933 934 static int cxgb_open(struct net_device *dev) 935 { 936 - int err; 937 - struct adapter *adapter = dev->priv; 938 struct port_info *pi = netdev_priv(dev); 939 int other_ports = adapter->open_device_map & PORT_MASK; 940 941 if (!adapter->open_device_map && (err = cxgb_up(adapter)) < 0) 942 return err; ··· 960 961 static int cxgb_close(struct net_device *dev) 962 { 963 - struct adapter *adapter = dev->priv; 964 - struct port_info *p = netdev_priv(dev); 965 966 - t3_port_intr_disable(adapter, p->port_id); 967 netif_stop_queue(dev); 968 - p->phy.ops->power_down(&p->phy, 1); 969 netif_carrier_off(dev); 970 - t3_mac_disable(&p->mac, MAC_DIRECTION_TX | MAC_DIRECTION_RX); 971 972 spin_lock(&adapter->work_lock); /* sync with update task */ 973 - clear_bit(p->port_id, &adapter->open_device_map); 974 spin_unlock(&adapter->work_lock); 975 976 if (!(adapter->open_device_map & PORT_MASK)) ··· 985 986 static struct net_device_stats *cxgb_get_stats(struct net_device *dev) 987 { 988 - struct adapter *adapter = dev->priv; 989 - struct port_info *p = netdev_priv(dev); 990 - struct net_device_stats *ns = &p->netstats; 991 const struct mac_stats *pstats; 992 993 spin_lock(&adapter->stats_lock); 994 - pstats = t3_mac_update_stats(&p->mac); 995 spin_unlock(&adapter->stats_lock); 996 997 ns->tx_bytes = pstats->tx_octets; ··· 1024 1025 static u32 get_msglevel(struct net_device *dev) 1026 { 1027 - struct adapter *adapter = dev->priv; 1028 1029 return adapter->msg_enable; 1030 } 1031 1032 static void set_msglevel(struct net_device *dev, u32 val) 1033 { 1034 - struct adapter *adapter = dev->priv; 1035 1036 adapter->msg_enable = val; 1037 } ··· 1107 1108 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 1109 { 1110 u32 fw_vers = 0; 1111 - struct adapter *adapter = dev->priv; 1112 1113 t3_get_fw_version(adapter, &fw_vers); 1114 ··· 1148 static void get_stats(struct net_device *dev, struct ethtool_stats *stats, 1149 u64 *data) 1150 { 1151 - struct adapter *adapter = dev->priv; 1152 struct port_info *pi = netdev_priv(dev); 1153 const struct mac_stats *s; 1154 1155 spin_lock(&adapter->stats_lock); ··· 1217 static void get_regs(struct net_device *dev, struct ethtool_regs *regs, 1218 void *buf) 1219 { 1220 - struct adapter *ap = dev->priv; 1221 1222 /* 1223 * Version scheme: ··· 1259 1260 static int cxgb3_phys_id(struct net_device *dev, u32 data) 1261 { 1262 int i; 1263 - struct adapter *adapter = dev->priv; 1264 1265 if (data == 0) 1266 data = 2; ··· 1422 1423 static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e) 1424 { 1425 - const struct adapter *adapter = dev->priv; 1426 - const struct port_info *pi = netdev_priv(dev); 1427 const struct qset_params *q = &adapter->params.sge.qset[pi->first_qset]; 1428 1429 e->rx_max_pending = MAX_RX_BUFFERS; ··· 1439 1440 static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e) 1441 { 1442 - int i; 1443 struct qset_params *q; 1444 - struct adapter *adapter = dev->priv; 1445 - const struct port_info *pi = netdev_priv(dev); 1446 1447 if (e->rx_pending > MAX_RX_BUFFERS || 1448 e->rx_jumbo_pending > MAX_RX_JUMBO_BUFFERS || ··· 1471 1472 static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c) 1473 { 1474 - struct adapter *adapter = dev->priv; 1475 struct qset_params *qsp = &adapter->params.sge.qset[0]; 1476 struct sge_qset *qs = &adapter->sge.qs[0]; 1477 ··· 1486 1487 static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c) 1488 { 1489 - struct adapter *adapter = dev->priv; 1490 struct qset_params *q = adapter->params.sge.qset; 1491 1492 c->rx_coalesce_usecs = q->coalesce_usecs; ··· 1497 static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e, 1498 u8 * data) 1499 { 1500 int i, err = 0; 1501 - struct adapter *adapter = dev->priv; 1502 1503 u8 *buf = kmalloc(EEPROMSIZE, GFP_KERNEL); 1504 if (!buf) ··· 1518 static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, 1519 u8 * data) 1520 { 1521 u8 *buf; 1522 int err = 0; 1523 - u32 aligned_offset, aligned_len, *p; 1524 - struct adapter *adapter = dev->priv; 1525 1526 if (eeprom->magic != EEPROM_MAGIC) 1527 return -EINVAL; ··· 1610 1611 static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr) 1612 { 1613 - int ret; 1614 u32 cmd; 1615 - struct adapter *adapter = dev->priv; 1616 1617 if (copy_from_user(&cmd, useraddr, sizeof(cmd))) 1618 return -EFAULT; ··· 1942 1943 static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd) 1944 { 1945 - int ret, mmd; 1946 - struct adapter *adapter = dev->priv; 1947 - struct port_info *pi = netdev_priv(dev); 1948 struct mii_ioctl_data *data = if_mii(req); 1949 1950 switch (cmd) { 1951 case SIOCGMIIPHY: ··· 2013 2014 static int cxgb_change_mtu(struct net_device *dev, int new_mtu) 2015 { 2016 - int ret; 2017 - struct adapter *adapter = dev->priv; 2018 struct port_info *pi = netdev_priv(dev); 2019 2020 if (new_mtu < 81) /* accommodate SACK */ 2021 return -EINVAL; ··· 2032 2033 static int cxgb_set_mac_addr(struct net_device *dev, void *p) 2034 { 2035 - struct adapter *adapter = dev->priv; 2036 struct port_info *pi = netdev_priv(dev); 2037 struct sockaddr *addr = p; 2038 2039 if (!is_valid_ether_addr(addr->sa_data)) ··· 2069 2070 static void vlan_rx_register(struct net_device *dev, struct vlan_group *grp) 2071 { 2072 - struct adapter *adapter = dev->priv; 2073 struct port_info *pi = netdev_priv(dev); 2074 2075 pi->vlan_grp = grp; 2076 if (adapter->params.rev > 0) ··· 2089 #ifdef CONFIG_NET_POLL_CONTROLLER 2090 static void cxgb_netpoll(struct net_device *dev) 2091 { 2092 - struct adapter *adapter = dev->priv; 2093 struct port_info *pi = netdev_priv(dev); 2094 int qidx; 2095 2096 for (qidx = pi->first_qset; qidx < pi->first_qset + pi->nqsets; qidx++) { ··· 2452 2453 adapter->port[i] = netdev; 2454 pi = netdev_priv(netdev); 2455 pi->rx_csum_offload = 1; 2456 pi->nqsets = 1; 2457 pi->first_qset = i; ··· 2462 netdev->irq = pdev->irq; 2463 netdev->mem_start = mmio_start; 2464 netdev->mem_end = mmio_start + mmio_len - 1; 2465 - netdev->priv = adapter; 2466 netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO; 2467 netdev->features |= NETIF_F_LLTX; 2468 if (pci_using_dac) ··· 2486 SET_ETHTOOL_OPS(netdev, &cxgb_ethtool_ops); 2487 } 2488 2489 - pci_set_drvdata(pdev, adapter->port[0]); 2490 if (t3_prep_adapter(adapter, ai, 1) < 0) { 2491 err = -ENODEV; 2492 goto out_free_dev; ··· 2566 2567 static void __devexit remove_one(struct pci_dev *pdev) 2568 { 2569 - struct net_device *dev = pci_get_drvdata(pdev); 2570 2571 - if (dev) { 2572 int i; 2573 - struct adapter *adapter = dev->priv; 2574 2575 t3_sge_stop(adapter); 2576 sysfs_remove_group(&adapter->port[0]->dev.kobj,
··· 358 359 for (j = 0; j < pi->nqsets - 1; j++) { 360 if (!adap->dummy_netdev[dummy_idx]) { 361 + struct port_info *p; 362 + 363 + nd = alloc_netdev(sizeof(*p), "", ether_setup); 364 if (!nd) 365 goto free_all; 366 367 + p = netdev_priv(nd); 368 + p->adapter = adap; 369 nd->weight = 64; 370 set_bit(__LINK_STATE_START, &nd->state); 371 adap->dummy_netdev[dummy_idx] = nd; ··· 482 #define CXGB3_SHOW(name, val_expr) \ 483 static ssize_t format_##name(struct net_device *dev, char *buf) \ 484 { \ 485 + struct port_info *pi = netdev_priv(dev); \ 486 + struct adapter *adap = pi->adapter; \ 487 return sprintf(buf, "%u\n", val_expr); \ 488 } \ 489 static ssize_t show_##name(struct device *d, struct device_attribute *attr, \ ··· 493 494 static ssize_t set_nfilters(struct net_device *dev, unsigned int val) 495 { 496 + struct port_info *pi = netdev_priv(dev); 497 + struct adapter *adap = pi->adapter; 498 int min_tids = is_offload(adap) ? MC5_MIN_TIDS : 0; 499 500 if (adap->flags & FULL_INIT_DONE) ··· 515 516 static ssize_t set_nservers(struct net_device *dev, unsigned int val) 517 { 518 + struct port_info *pi = netdev_priv(dev); 519 + struct adapter *adap = pi->adapter; 520 521 if (adap->flags & FULL_INIT_DONE) 522 return -EBUSY; ··· 556 static ssize_t tm_attr_show(struct device *d, struct device_attribute *attr, 557 char *buf, int sched) 558 { 559 + struct port_info *pi = netdev_priv(to_net_dev(d)); 560 + struct adapter *adap = pi->adapter; 561 unsigned int v, addr, bpt, cpt; 562 + ssize_t len; 563 564 addr = A_TP_TX_MOD_Q1_Q0_RATE_LIMIT - sched / 2; 565 rtnl_lock(); ··· 581 static ssize_t tm_attr_store(struct device *d, struct device_attribute *attr, 582 const char *buf, size_t len, int sched) 583 { 584 + struct port_info *pi = netdev_priv(to_net_dev(d)); 585 + struct adapter *adap = pi->adapter; 586 + unsigned int val; 587 char *endp; 588 ssize_t ret; 589 590 if (!capable(CAP_NET_ADMIN)) 591 return -EPERM; ··· 858 859 static int offload_open(struct net_device *dev) 860 { 861 + struct port_info *pi = netdev_priv(dev); 862 + struct adapter *adapter = pi->adapter; 863 + struct t3cdev *tdev = dev2t3cdev(dev); 864 int adap_up = adapter->open_device_map & PORT_MASK; 865 int err = 0; 866 ··· 924 925 static int cxgb_open(struct net_device *dev) 926 { 927 struct port_info *pi = netdev_priv(dev); 928 + struct adapter *adapter = pi->adapter; 929 int other_ports = adapter->open_device_map & PORT_MASK; 930 + int err; 931 932 if (!adapter->open_device_map && (err = cxgb_up(adapter)) < 0) 933 return err; ··· 951 952 static int cxgb_close(struct net_device *dev) 953 { 954 + struct port_info *pi = netdev_priv(dev); 955 + struct adapter *adapter = pi->adapter; 956 957 + t3_port_intr_disable(adapter, pi->port_id); 958 netif_stop_queue(dev); 959 + pi->phy.ops->power_down(&pi->phy, 1); 960 netif_carrier_off(dev); 961 + t3_mac_disable(&pi->mac, MAC_DIRECTION_TX | MAC_DIRECTION_RX); 962 963 spin_lock(&adapter->work_lock); /* sync with update task */ 964 + clear_bit(pi->port_id, &adapter->open_device_map); 965 spin_unlock(&adapter->work_lock); 966 967 if (!(adapter->open_device_map & PORT_MASK)) ··· 976 977 static struct net_device_stats *cxgb_get_stats(struct net_device *dev) 978 { 979 + struct port_info *pi = netdev_priv(dev); 980 + struct adapter *adapter = pi->adapter; 981 + struct net_device_stats *ns = &pi->netstats; 982 const struct mac_stats *pstats; 983 984 spin_lock(&adapter->stats_lock); 985 + pstats = t3_mac_update_stats(&pi->mac); 986 spin_unlock(&adapter->stats_lock); 987 988 ns->tx_bytes = pstats->tx_octets; ··· 1015 1016 static u32 get_msglevel(struct net_device *dev) 1017 { 1018 + struct port_info *pi = netdev_priv(dev); 1019 + struct adapter *adapter = pi->adapter; 1020 1021 return adapter->msg_enable; 1022 } 1023 1024 static void set_msglevel(struct net_device *dev, u32 val) 1025 { 1026 + struct port_info *pi = netdev_priv(dev); 1027 + struct adapter *adapter = pi->adapter; 1028 1029 adapter->msg_enable = val; 1030 } ··· 1096 1097 static void get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) 1098 { 1099 + struct port_info *pi = netdev_priv(dev); 1100 + struct adapter *adapter = pi->adapter; 1101 u32 fw_vers = 0; 1102 1103 t3_get_fw_version(adapter, &fw_vers); 1104 ··· 1136 static void get_stats(struct net_device *dev, struct ethtool_stats *stats, 1137 u64 *data) 1138 { 1139 struct port_info *pi = netdev_priv(dev); 1140 + struct adapter *adapter = pi->adapter; 1141 const struct mac_stats *s; 1142 1143 spin_lock(&adapter->stats_lock); ··· 1205 static void get_regs(struct net_device *dev, struct ethtool_regs *regs, 1206 void *buf) 1207 { 1208 + struct port_info *pi = netdev_priv(dev); 1209 + struct adapter *ap = pi->adapter; 1210 1211 /* 1212 * Version scheme: ··· 1246 1247 static int cxgb3_phys_id(struct net_device *dev, u32 data) 1248 { 1249 + struct port_info *pi = netdev_priv(dev); 1250 + struct adapter *adapter = pi->adapter; 1251 int i; 1252 1253 if (data == 0) 1254 data = 2; ··· 1408 1409 static void get_sge_param(struct net_device *dev, struct ethtool_ringparam *e) 1410 { 1411 + struct port_info *pi = netdev_priv(dev); 1412 + struct adapter *adapter = pi->adapter; 1413 const struct qset_params *q = &adapter->params.sge.qset[pi->first_qset]; 1414 1415 e->rx_max_pending = MAX_RX_BUFFERS; ··· 1425 1426 static int set_sge_param(struct net_device *dev, struct ethtool_ringparam *e) 1427 { 1428 + struct port_info *pi = netdev_priv(dev); 1429 + struct adapter *adapter = pi->adapter; 1430 struct qset_params *q; 1431 + int i; 1432 1433 if (e->rx_pending > MAX_RX_BUFFERS || 1434 e->rx_jumbo_pending > MAX_RX_JUMBO_BUFFERS || ··· 1457 1458 static int set_coalesce(struct net_device *dev, struct ethtool_coalesce *c) 1459 { 1460 + struct port_info *pi = netdev_priv(dev); 1461 + struct adapter *adapter = pi->adapter; 1462 struct qset_params *qsp = &adapter->params.sge.qset[0]; 1463 struct sge_qset *qs = &adapter->sge.qs[0]; 1464 ··· 1471 1472 static int get_coalesce(struct net_device *dev, struct ethtool_coalesce *c) 1473 { 1474 + struct port_info *pi = netdev_priv(dev); 1475 + struct adapter *adapter = pi->adapter; 1476 struct qset_params *q = adapter->params.sge.qset; 1477 1478 c->rx_coalesce_usecs = q->coalesce_usecs; ··· 1481 static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e, 1482 u8 * data) 1483 { 1484 + struct port_info *pi = netdev_priv(dev); 1485 + struct adapter *adapter = pi->adapter; 1486 int i, err = 0; 1487 1488 u8 *buf = kmalloc(EEPROMSIZE, GFP_KERNEL); 1489 if (!buf) ··· 1501 static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom, 1502 u8 * data) 1503 { 1504 + struct port_info *pi = netdev_priv(dev); 1505 + struct adapter *adapter = pi->adapter; 1506 + u32 aligned_offset, aligned_len, *p; 1507 u8 *buf; 1508 int err = 0; 1509 1510 if (eeprom->magic != EEPROM_MAGIC) 1511 return -EINVAL; ··· 1592 1593 static int cxgb_extension_ioctl(struct net_device *dev, void __user *useraddr) 1594 { 1595 + struct port_info *pi = netdev_priv(dev); 1596 + struct adapter *adapter = pi->adapter; 1597 u32 cmd; 1598 + int ret; 1599 1600 if (copy_from_user(&cmd, useraddr, sizeof(cmd))) 1601 return -EFAULT; ··· 1923 1924 static int cxgb_ioctl(struct net_device *dev, struct ifreq *req, int cmd) 1925 { 1926 struct mii_ioctl_data *data = if_mii(req); 1927 + struct port_info *pi = netdev_priv(dev); 1928 + struct adapter *adapter = pi->adapter; 1929 + int ret, mmd; 1930 1931 switch (cmd) { 1932 case SIOCGMIIPHY: ··· 1994 1995 static int cxgb_change_mtu(struct net_device *dev, int new_mtu) 1996 { 1997 struct port_info *pi = netdev_priv(dev); 1998 + struct adapter *adapter = pi->adapter; 1999 + int ret; 2000 2001 if (new_mtu < 81) /* accommodate SACK */ 2002 return -EINVAL; ··· 2013 2014 static int cxgb_set_mac_addr(struct net_device *dev, void *p) 2015 { 2016 struct port_info *pi = netdev_priv(dev); 2017 + struct adapter *adapter = pi->adapter; 2018 struct sockaddr *addr = p; 2019 2020 if (!is_valid_ether_addr(addr->sa_data)) ··· 2050 2051 static void vlan_rx_register(struct net_device *dev, struct vlan_group *grp) 2052 { 2053 struct port_info *pi = netdev_priv(dev); 2054 + struct adapter *adapter = pi->adapter; 2055 2056 pi->vlan_grp = grp; 2057 if (adapter->params.rev > 0) ··· 2070 #ifdef CONFIG_NET_POLL_CONTROLLER 2071 static void cxgb_netpoll(struct net_device *dev) 2072 { 2073 struct port_info *pi = netdev_priv(dev); 2074 + struct adapter *adapter = pi->adapter; 2075 int qidx; 2076 2077 for (qidx = pi->first_qset; qidx < pi->first_qset + pi->nqsets; qidx++) { ··· 2433 2434 adapter->port[i] = netdev; 2435 pi = netdev_priv(netdev); 2436 + pi->adapter = adapter; 2437 pi->rx_csum_offload = 1; 2438 pi->nqsets = 1; 2439 pi->first_qset = i; ··· 2442 netdev->irq = pdev->irq; 2443 netdev->mem_start = mmio_start; 2444 netdev->mem_end = mmio_start + mmio_len - 1; 2445 netdev->features |= NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO; 2446 netdev->features |= NETIF_F_LLTX; 2447 if (pci_using_dac) ··· 2467 SET_ETHTOOL_OPS(netdev, &cxgb_ethtool_ops); 2468 } 2469 2470 + pci_set_drvdata(pdev, adapter); 2471 if (t3_prep_adapter(adapter, ai, 1) < 0) { 2472 err = -ENODEV; 2473 goto out_free_dev; ··· 2547 2548 static void __devexit remove_one(struct pci_dev *pdev) 2549 { 2550 + struct adapter *adapter = pci_get_drvdata(pdev); 2551 2552 + if (adapter) { 2553 int i; 2554 2555 t3_sge_stop(adapter); 2556 sysfs_remove_group(&adapter->port[0]->dev.kobj,
+13 -3
drivers/net/cxgb3/cxgb3_offload.c
··· 593 594 EXPORT_SYMBOL(cxgb3_alloc_stid); 595 596 static int do_smt_write_rpl(struct t3cdev *dev, struct sk_buff *skb) 597 { 598 struct cpl_smt_write_rpl *rpl = cplhdr(skb); ··· 935 struct net_device *dev = neigh->dev; 936 937 if (dev && (is_offloading(dev))) { 938 - struct t3cdev *tdev = T3CDEV(dev); 939 940 BUG_ON(!tdev); 941 t3_l2t_update(tdev, neigh); ··· 983 "device ignored.\n", __FUNCTION__); 984 return; 985 } 986 - tdev = T3CDEV(olddev); 987 BUG_ON(!tdev); 988 - if (tdev != T3CDEV(newdev)) { 989 printk(KERN_WARNING "%s: Redirect to different " 990 "offload device ignored.\n", __FUNCTION__); 991 return;
··· 593 594 EXPORT_SYMBOL(cxgb3_alloc_stid); 595 596 + /* Get the t3cdev associated with a net_device */ 597 + struct t3cdev *dev2t3cdev(struct net_device *dev) 598 + { 599 + const struct port_info *pi = netdev_priv(dev); 600 + 601 + return (struct t3cdev *)pi->adapter; 602 + } 603 + 604 + EXPORT_SYMBOL(dev2t3cdev); 605 + 606 static int do_smt_write_rpl(struct t3cdev *dev, struct sk_buff *skb) 607 { 608 struct cpl_smt_write_rpl *rpl = cplhdr(skb); ··· 925 struct net_device *dev = neigh->dev; 926 927 if (dev && (is_offloading(dev))) { 928 + struct t3cdev *tdev = dev2t3cdev(dev); 929 930 BUG_ON(!tdev); 931 t3_l2t_update(tdev, neigh); ··· 973 "device ignored.\n", __FUNCTION__); 974 return; 975 } 976 + tdev = dev2t3cdev(olddev); 977 BUG_ON(!tdev); 978 + if (tdev != dev2t3cdev(newdev)) { 979 printk(KERN_WARNING "%s: Redirect to different " 980 "offload device ignored.\n", __FUNCTION__); 981 return;
+2
drivers/net/cxgb3/cxgb3_offload.h
··· 51 52 void cxgb3_set_dummy_ops(struct t3cdev *dev); 53 54 /* 55 * Client registration. Users of T3 driver must register themselves. 56 * The T3 driver will call the add function of every client for each T3
··· 51 52 void cxgb3_set_dummy_ops(struct t3cdev *dev); 53 54 + struct t3cdev *dev2t3cdev(struct net_device *dev); 55 + 56 /* 57 * Client registration. Users of T3 driver must register themselves. 58 * The T3 driver will call the add function of every client for each T3
+15 -8
drivers/net/cxgb3/sge.c
··· 1073 { 1074 unsigned int ndesc, pidx, credits, gen, compl; 1075 const struct port_info *pi = netdev_priv(dev); 1076 - struct adapter *adap = dev->priv; 1077 struct sge_qset *qs = dev2qset(dev); 1078 struct sge_txq *q = &qs->txq[TXQ_ETH]; 1079 ··· 1326 struct sk_buff *skb; 1327 struct sge_qset *qs = (struct sge_qset *)data; 1328 struct sge_txq *q = &qs->txq[TXQ_CTRL]; 1329 - struct adapter *adap = qs->netdev->priv; 1330 1331 spin_lock(&q->lock); 1332 again:reclaim_completed_tx_imm(q); ··· 1532 struct sk_buff *skb; 1533 struct sge_qset *qs = (struct sge_qset *)data; 1534 struct sge_txq *q = &qs->txq[TXQ_OFLD]; 1535 - struct adapter *adap = qs->netdev->priv; 1536 1537 spin_lock(&q->lock); 1538 again:reclaim_completed_tx(adap, q); ··· 1677 */ 1678 static int ofld_poll(struct net_device *dev, int *budget) 1679 { 1680 - struct adapter *adapter = dev->priv; 1681 struct sge_qset *qs = dev2qset(dev); 1682 struct sge_rspq *q = &qs->rspq; 1683 int work_done, limit = min(*budget, dev->quota), avail = limit; ··· 2078 */ 2079 static int napi_rx_handler(struct net_device *dev, int *budget) 2080 { 2081 - struct adapter *adap = dev->priv; 2082 struct sge_qset *qs = dev2qset(dev); 2083 int effective_budget = min(*budget, dev->quota); 2084 ··· 2209 irqreturn_t t3_sge_intr_msix(int irq, void *cookie) 2210 { 2211 struct sge_qset *qs = cookie; 2212 - struct adapter *adap = qs->netdev->priv; 2213 struct sge_rspq *q = &qs->rspq; 2214 2215 spin_lock(&q->lock); ··· 2229 irqreturn_t t3_sge_intr_msix_napi(int irq, void *cookie) 2230 { 2231 struct sge_qset *qs = cookie; 2232 - struct adapter *adap = qs->netdev->priv; 2233 struct sge_rspq *q = &qs->rspq; 2234 2235 spin_lock(&q->lock); ··· 2514 { 2515 spinlock_t *lock; 2516 struct sge_qset *qs = (struct sge_qset *)data; 2517 - struct adapter *adap = qs->netdev->priv; 2518 2519 if (spin_trylock(&qs->txq[TXQ_ETH].lock)) { 2520 reclaim_completed_tx(adap, &qs->txq[TXQ_ETH]);
··· 1073 { 1074 unsigned int ndesc, pidx, credits, gen, compl; 1075 const struct port_info *pi = netdev_priv(dev); 1076 + struct adapter *adap = pi->adapter; 1077 struct sge_qset *qs = dev2qset(dev); 1078 struct sge_txq *q = &qs->txq[TXQ_ETH]; 1079 ··· 1326 struct sk_buff *skb; 1327 struct sge_qset *qs = (struct sge_qset *)data; 1328 struct sge_txq *q = &qs->txq[TXQ_CTRL]; 1329 + const struct port_info *pi = netdev_priv(qs->netdev); 1330 + struct adapter *adap = pi->adapter; 1331 1332 spin_lock(&q->lock); 1333 again:reclaim_completed_tx_imm(q); ··· 1531 struct sk_buff *skb; 1532 struct sge_qset *qs = (struct sge_qset *)data; 1533 struct sge_txq *q = &qs->txq[TXQ_OFLD]; 1534 + const struct port_info *pi = netdev_priv(qs->netdev); 1535 + struct adapter *adap = pi->adapter; 1536 1537 spin_lock(&q->lock); 1538 again:reclaim_completed_tx(adap, q); ··· 1675 */ 1676 static int ofld_poll(struct net_device *dev, int *budget) 1677 { 1678 + const struct port_info *pi = netdev_priv(dev); 1679 + struct adapter *adapter = pi->adapter; 1680 struct sge_qset *qs = dev2qset(dev); 1681 struct sge_rspq *q = &qs->rspq; 1682 int work_done, limit = min(*budget, dev->quota), avail = limit; ··· 2075 */ 2076 static int napi_rx_handler(struct net_device *dev, int *budget) 2077 { 2078 + const struct port_info *pi = netdev_priv(dev); 2079 + struct adapter *adap = pi->adapter; 2080 struct sge_qset *qs = dev2qset(dev); 2081 int effective_budget = min(*budget, dev->quota); 2082 ··· 2205 irqreturn_t t3_sge_intr_msix(int irq, void *cookie) 2206 { 2207 struct sge_qset *qs = cookie; 2208 + const struct port_info *pi = netdev_priv(qs->netdev); 2209 + struct adapter *adap = pi->adapter; 2210 struct sge_rspq *q = &qs->rspq; 2211 2212 spin_lock(&q->lock); ··· 2224 irqreturn_t t3_sge_intr_msix_napi(int irq, void *cookie) 2225 { 2226 struct sge_qset *qs = cookie; 2227 + const struct port_info *pi = netdev_priv(qs->netdev); 2228 + struct adapter *adap = pi->adapter; 2229 struct sge_rspq *q = &qs->rspq; 2230 2231 spin_lock(&q->lock); ··· 2508 { 2509 spinlock_t *lock; 2510 struct sge_qset *qs = (struct sge_qset *)data; 2511 + const struct port_info *pi = netdev_priv(qs->netdev); 2512 + struct adapter *adap = pi->adapter; 2513 2514 if (spin_trylock(&qs->txq[TXQ_ETH].lock)) { 2515 reclaim_completed_tx(adap, &qs->txq[TXQ_ETH]);
-3
drivers/net/cxgb3/t3cdev.h
··· 42 43 #define T3CNAMSIZ 16 44 45 - /* Get the t3cdev associated with a net_device */ 46 - #define T3CDEV(netdev) (struct t3cdev *)(netdev->priv) 47 - 48 struct cxgb3_client; 49 50 enum t3ctype {
··· 42 43 #define T3CNAMSIZ 16 44 45 struct cxgb3_client; 46 47 enum t3ctype {