Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6

Conflicts:
drivers/net/bnx2x/bnx2x_ethtool.c

+197 -136
+1
MAINTAINERS
··· 151 151 F: drivers/net/hamradio/6pack.c 152 152 153 153 8169 10/100/1000 GIGABIT ETHERNET DRIVER 154 + M: Realtek linux nic maintainers <nic_swsd@realtek.com> 154 155 M: Francois Romieu <romieu@fr.zoreil.com> 155 156 L: netdev@vger.kernel.org 156 157 S: Maintained
+1
drivers/connector/connector.c
··· 142 142 cbq->callback(msg, nsp); 143 143 kfree_skb(skb); 144 144 cn_queue_release_callback(cbq); 145 + err = 0; 145 146 } 146 147 147 148 return err;
+18 -13
drivers/net/bna/bfa_ioc.c
··· 38 38 #define bfa_ioc_map_port(__ioc) ((__ioc)->ioc_hwif->ioc_map_port(__ioc)) 39 39 #define bfa_ioc_notify_fail(__ioc) \ 40 40 ((__ioc)->ioc_hwif->ioc_notify_fail(__ioc)) 41 + #define bfa_ioc_sync_start(__ioc) \ 42 + ((__ioc)->ioc_hwif->ioc_sync_start(__ioc)) 41 43 #define bfa_ioc_sync_join(__ioc) \ 42 44 ((__ioc)->ioc_hwif->ioc_sync_join(__ioc)) 43 45 #define bfa_ioc_sync_leave(__ioc) \ ··· 604 602 switch (event) { 605 603 case IOCPF_E_SEMLOCKED: 606 604 if (bfa_ioc_firmware_lock(ioc)) { 607 - if (bfa_ioc_sync_complete(ioc)) { 605 + if (bfa_ioc_sync_start(ioc)) { 608 606 iocpf->retry_count = 0; 609 607 bfa_ioc_sync_join(ioc); 610 608 bfa_fsm_set_state(iocpf, bfa_iocpf_sm_hwinit); ··· 1315 1313 * execution context (driver/bios) must match. 1316 1314 */ 1317 1315 static bool 1318 - bfa_ioc_fwver_valid(struct bfa_ioc *ioc) 1316 + bfa_ioc_fwver_valid(struct bfa_ioc *ioc, u32 boot_env) 1319 1317 { 1320 1318 struct bfi_ioc_image_hdr fwhdr, *drv_fwhdr; 1321 1319 ··· 1326 1324 if (fwhdr.signature != drv_fwhdr->signature) 1327 1325 return false; 1328 1326 1329 - if (fwhdr.exec != drv_fwhdr->exec) 1327 + if (swab32(fwhdr.param) != boot_env) 1330 1328 return false; 1331 1329 1332 1330 return bfa_nw_ioc_fwver_cmp(ioc, &fwhdr); ··· 1353 1351 { 1354 1352 enum bfi_ioc_state ioc_fwstate; 1355 1353 bool fwvalid; 1354 + u32 boot_env; 1356 1355 1357 1356 ioc_fwstate = readl(ioc->ioc_regs.ioc_fwstate); 1357 + 1358 + boot_env = BFI_BOOT_LOADER_OS; 1358 1359 1359 1360 if (force) 1360 1361 ioc_fwstate = BFI_IOC_UNINIT; ··· 1366 1361 * check if firmware is valid 1367 1362 */ 1368 1363 fwvalid = (ioc_fwstate == BFI_IOC_UNINIT) ? 1369 - false : bfa_ioc_fwver_valid(ioc); 1364 + false : bfa_ioc_fwver_valid(ioc, boot_env); 1370 1365 1371 1366 if (!fwvalid) { 1372 - bfa_ioc_boot(ioc, BFI_BOOT_TYPE_NORMAL, ioc->pcidev.device_id); 1367 + bfa_ioc_boot(ioc, BFI_BOOT_TYPE_NORMAL, boot_env); 1373 1368 return; 1374 1369 } 1375 1370 ··· 1400 1395 /** 1401 1396 * Initialize the h/w for any other states. 1402 1397 */ 1403 - bfa_ioc_boot(ioc, BFI_BOOT_TYPE_NORMAL, ioc->pcidev.device_id); 1398 + bfa_ioc_boot(ioc, BFI_BOOT_TYPE_NORMAL, boot_env); 1404 1399 } 1405 1400 1406 1401 void ··· 1510 1505 */ 1511 1506 static void 1512 1507 bfa_ioc_download_fw(struct bfa_ioc *ioc, u32 boot_type, 1513 - u32 boot_param) 1508 + u32 boot_env) 1514 1509 { 1515 1510 u32 *fwimg; 1516 1511 u32 pgnum; ··· 1561 1556 /* 1562 1557 * Set boot type and boot param at the end. 1563 1558 */ 1564 - writel((swab32(swab32(boot_type))), ((ioc->ioc_regs.smem_page_start) 1559 + writel(boot_type, ((ioc->ioc_regs.smem_page_start) 1565 1560 + (BFI_BOOT_TYPE_OFF))); 1566 - writel((swab32(swab32(boot_param))), ((ioc->ioc_regs.smem_page_start) 1567 - + (BFI_BOOT_PARAM_OFF))); 1561 + writel(boot_env, ((ioc->ioc_regs.smem_page_start) 1562 + + (BFI_BOOT_LOADER_OFF))); 1568 1563 } 1569 1564 1570 1565 static void ··· 1724 1719 * as the entry vector. 1725 1720 */ 1726 1721 static void 1727 - bfa_ioc_boot(struct bfa_ioc *ioc, u32 boot_type, u32 boot_param) 1722 + bfa_ioc_boot(struct bfa_ioc *ioc, u32 boot_type, u32 boot_env) 1728 1723 { 1729 1724 void __iomem *rb; 1730 1725 ··· 1737 1732 * Initialize IOC state of all functions on a chip reset. 1738 1733 */ 1739 1734 rb = ioc->pcidev.pci_bar_kva; 1740 - if (boot_param == BFI_BOOT_TYPE_MEMTEST) { 1735 + if (boot_type == BFI_BOOT_TYPE_MEMTEST) { 1741 1736 writel(BFI_IOC_MEMTEST, (rb + BFA_IOC0_STATE_REG)); 1742 1737 writel(BFI_IOC_MEMTEST, (rb + BFA_IOC1_STATE_REG)); 1743 1738 } else { ··· 1746 1741 } 1747 1742 1748 1743 bfa_ioc_msgflush(ioc); 1749 - bfa_ioc_download_fw(ioc, boot_type, boot_param); 1744 + bfa_ioc_download_fw(ioc, boot_type, boot_env); 1750 1745 1751 1746 /** 1752 1747 * Enable interrupts just before starting LPU
+1
drivers/net/bna/bfa_ioc.h
··· 194 194 bool msix); 195 195 void (*ioc_notify_fail) (struct bfa_ioc *ioc); 196 196 void (*ioc_ownership_reset) (struct bfa_ioc *ioc); 197 + bool (*ioc_sync_start) (struct bfa_ioc *ioc); 197 198 void (*ioc_sync_join) (struct bfa_ioc *ioc); 198 199 void (*ioc_sync_leave) (struct bfa_ioc *ioc); 199 200 void (*ioc_sync_ack) (struct bfa_ioc *ioc);
+28
drivers/net/bna/bfa_ioc_ct.c
··· 41 41 static void bfa_ioc_ct_isr_mode_set(struct bfa_ioc *ioc, bool msix); 42 42 static void bfa_ioc_ct_notify_fail(struct bfa_ioc *ioc); 43 43 static void bfa_ioc_ct_ownership_reset(struct bfa_ioc *ioc); 44 + static bool bfa_ioc_ct_sync_start(struct bfa_ioc *ioc); 44 45 static void bfa_ioc_ct_sync_join(struct bfa_ioc *ioc); 45 46 static void bfa_ioc_ct_sync_leave(struct bfa_ioc *ioc); 46 47 static void bfa_ioc_ct_sync_ack(struct bfa_ioc *ioc); ··· 64 63 nw_hwif_ct.ioc_isr_mode_set = bfa_ioc_ct_isr_mode_set; 65 64 nw_hwif_ct.ioc_notify_fail = bfa_ioc_ct_notify_fail; 66 65 nw_hwif_ct.ioc_ownership_reset = bfa_ioc_ct_ownership_reset; 66 + nw_hwif_ct.ioc_sync_start = bfa_ioc_ct_sync_start; 67 67 nw_hwif_ct.ioc_sync_join = bfa_ioc_ct_sync_join; 68 68 nw_hwif_ct.ioc_sync_leave = bfa_ioc_ct_sync_leave; 69 69 nw_hwif_ct.ioc_sync_ack = bfa_ioc_ct_sync_ack; ··· 344 342 bfa_nw_ioc_hw_sem_release(ioc); 345 343 } 346 344 345 + /** 346 + * Synchronized IOC failure processing routines 347 + */ 348 + static bool 349 + bfa_ioc_ct_sync_start(struct bfa_ioc *ioc) 350 + { 351 + u32 r32 = readl(ioc->ioc_regs.ioc_fail_sync); 352 + u32 sync_reqd = bfa_ioc_ct_get_sync_reqd(r32); 353 + 354 + /* 355 + * Driver load time. If the sync required bit for this PCI fn 356 + * is set, it is due to an unclean exit by the driver for this 357 + * PCI fn in the previous incarnation. Whoever comes here first 358 + * should clean it up, no matter which PCI fn. 359 + */ 360 + 361 + if (sync_reqd & bfa_ioc_ct_sync_pos(ioc)) { 362 + writel(0, ioc->ioc_regs.ioc_fail_sync); 363 + writel(1, ioc->ioc_regs.ioc_usage_reg); 364 + writel(BFI_IOC_UNINIT, ioc->ioc_regs.ioc_fwstate); 365 + writel(BFI_IOC_UNINIT, ioc->ioc_regs.alt_ioc_fwstate); 366 + return true; 367 + } 368 + 369 + return bfa_ioc_ct_sync_complete(ioc); 370 + } 347 371 /** 348 372 * Synchronized IOC failure processing routines 349 373 */
+4 -2
drivers/net/bna/bfi.h
··· 184 184 #define BFI_IOC_MSGLEN_MAX 32 /* 32 bytes */ 185 185 186 186 #define BFI_BOOT_TYPE_OFF 8 187 - #define BFI_BOOT_PARAM_OFF 12 187 + #define BFI_BOOT_LOADER_OFF 12 188 188 189 - #define BFI_BOOT_TYPE_NORMAL 0 /* param is device id */ 189 + #define BFI_BOOT_TYPE_NORMAL 0 190 190 #define BFI_BOOT_TYPE_FLASH 1 191 191 #define BFI_BOOT_TYPE_MEMTEST 2 192 + 193 + #define BFI_BOOT_LOADER_OS 0 192 194 193 195 #define BFI_BOOT_MEMTEST_RES_ADDR 0x900 194 196 #define BFI_BOOT_MEMTEST_RES_SIG 0xA0A1A2A3
-1
drivers/net/bna/bnad.c
··· 1837 1837 /* Initialize the Rx event handlers */ 1838 1838 rx_cbfn.rcb_setup_cbfn = bnad_cb_rcb_setup; 1839 1839 rx_cbfn.rcb_destroy_cbfn = bnad_cb_rcb_destroy; 1840 - rx_cbfn.rcb_destroy_cbfn = NULL; 1841 1840 rx_cbfn.ccb_setup_cbfn = bnad_cb_ccb_setup; 1842 1841 rx_cbfn.ccb_destroy_cbfn = bnad_cb_ccb_destroy; 1843 1842 rx_cbfn.rx_cleanup_cbfn = bnad_cb_rx_cleanup;
+5 -6
drivers/net/bnx2x/bnx2x_ethtool.c
··· 2030 2030 2031 2031 case ETHTOOL_ID_ON: 2032 2032 bnx2x_set_led(&bp->link_params, &bp->link_vars, 2033 - LED_MODE_OPER, SPEED_1000); 2033 + LED_MODE_ON, SPEED_1000); 2034 2034 break; 2035 2035 2036 2036 case ETHTOOL_ID_OFF: 2037 2037 bnx2x_set_led(&bp->link_params, &bp->link_vars, 2038 - LED_MODE_OFF, 0); 2038 + LED_MODE_FRONT_PANEL_OFF, 0); 2039 2039 2040 2040 break; 2041 2041 2042 2042 case ETHTOOL_ID_INACTIVE: 2043 - if (bp->link_vars.link_up) 2044 - bnx2x_set_led(&bp->link_params, &bp->link_vars, 2045 - LED_MODE_OPER, 2046 - bp->link_vars.line_speed); 2043 + bnx2x_set_led(&bp->link_params, &bp->link_vars, 2044 + LED_MODE_OPER, 2045 + bp->link_vars.line_speed); 2047 2046 } 2048 2047 2049 2048 return 0;
+1 -1
drivers/net/can/mscan/mpc5xxx_can.c
··· 260 260 261 261 if (!ofdev->dev.of_match) 262 262 return -EINVAL; 263 - data = (struct mpc5xxx_can_data *)of_dev->dev.of_match->data; 263 + data = (struct mpc5xxx_can_data *)ofdev->dev.of_match->data; 264 264 265 265 base = of_iomap(np, 0); 266 266 if (!base) {
+2 -1
drivers/net/loopback.c
··· 173 173 | NETIF_F_RXCSUM 174 174 | NETIF_F_HIGHDMA 175 175 | NETIF_F_LLTX 176 - | NETIF_F_NETNS_LOCAL; 176 + | NETIF_F_NETNS_LOCAL 177 + | NETIF_F_VLAN_CHALLENGED; 177 178 dev->ethtool_ops = &loopback_ethtool_ops; 178 179 dev->header_ops = &eth_header_ops; 179 180 dev->netdev_ops = &loopback_ops;
+3
drivers/net/natsemi.c
··· 860 860 prev_eedata = eedata; 861 861 } 862 862 863 + /* Store MAC Address in perm_addr */ 864 + memcpy(dev->perm_addr, dev->dev_addr, ETH_ALEN); 865 + 863 866 dev->base_addr = (unsigned long __force) ioaddr; 864 867 dev->irq = irq; 865 868
+1
drivers/net/qlcnic/qlcnic.h
··· 99 99 #define TX_UDPV6_PKT 0x0c 100 100 101 101 /* Tx defines */ 102 + #define QLCNIC_MAX_FRAGS_PER_TX 14 102 103 #define MAX_TSO_HEADER_DESC 2 103 104 #define MGMT_CMD_DESC_RESV 4 104 105 #define TX_STOP_THRESH ((MAX_SKB_FRAGS >> 2) + MAX_TSO_HEADER_DESC \
+14
drivers/net/qlcnic/qlcnic_main.c
··· 2138 2138 struct cmd_desc_type0 *hwdesc, *first_desc; 2139 2139 struct pci_dev *pdev; 2140 2140 struct ethhdr *phdr; 2141 + int delta = 0; 2141 2142 int i, k; 2142 2143 2143 2144 u32 producer; ··· 2158 2157 } 2159 2158 2160 2159 frag_count = skb_shinfo(skb)->nr_frags + 1; 2160 + /* 14 frags supported for normal packet and 2161 + * 32 frags supported for TSO packet 2162 + */ 2163 + if (!skb_is_gso(skb) && frag_count > QLCNIC_MAX_FRAGS_PER_TX) { 2164 + 2165 + for (i = 0; i < (frag_count - QLCNIC_MAX_FRAGS_PER_TX); i++) 2166 + delta += skb_shinfo(skb)->frags[i].size; 2167 + 2168 + if (!__pskb_pull_tail(skb, delta)) 2169 + goto drop_packet; 2170 + 2171 + frag_count = 1 + skb_shinfo(skb)->nr_frags; 2172 + } 2161 2173 2162 2174 if (unlikely(qlcnic_tx_avail(tx_ring) <= TX_STOP_THRESH)) { 2163 2175 netif_stop_queue(netdev);
+4 -2
drivers/net/sfc/efx.c
··· 328 328 * processing to finish, then directly poll (and ack ) the eventq. 329 329 * Finally reenable NAPI and interrupts. 330 330 * 331 - * Since we are touching interrupts the caller should hold the suspend lock 331 + * This is for use only during a loopback self-test. It must not 332 + * deliver any packets up the stack as this can result in deadlock. 332 333 */ 333 334 void efx_process_channel_now(struct efx_channel *channel) 334 335 { ··· 337 336 338 337 BUG_ON(channel->channel >= efx->n_channels); 339 338 BUG_ON(!channel->enabled); 339 + BUG_ON(!efx->loopback_selftest); 340 340 341 341 /* Disable interrupts and wait for ISRs to complete */ 342 342 efx_nic_disable_interrupts(efx); ··· 1438 1436 * restart the transmit interface early so the watchdog timer stops */ 1439 1437 efx_start_port(efx); 1440 1438 1441 - if (efx_dev_registered(efx)) 1439 + if (efx_dev_registered(efx) && !efx->port_inhibited) 1442 1440 netif_tx_wake_all_queues(efx->net_dev); 1443 1441 1444 1442 efx_for_each_channel(channel, efx)
+2
drivers/net/sfc/io.h
··· 152 152 153 153 spin_lock_irqsave(&efx->biu_lock, flags); 154 154 value->u32[0] = _efx_readd(efx, reg + 0); 155 + rmb(); 155 156 value->u32[1] = _efx_readd(efx, reg + 4); 156 157 value->u32[2] = _efx_readd(efx, reg + 8); 157 158 value->u32[3] = _efx_readd(efx, reg + 12); ··· 175 174 value->u64[0] = (__force __le64)__raw_readq(membase + addr); 176 175 #else 177 176 value->u32[0] = (__force __le32)__raw_readl(membase + addr); 177 + rmb(); 178 178 value->u32[1] = (__force __le32)__raw_readl(membase + addr + 4); 179 179 #endif 180 180 spin_unlock_irqrestore(&efx->biu_lock, flags);
-2
drivers/net/sfc/net_driver.h
··· 330 330 * @eventq_mask: Event queue pointer mask 331 331 * @eventq_read_ptr: Event queue read pointer 332 332 * @last_eventq_read_ptr: Last event queue read pointer value. 333 - * @magic_count: Event queue test event count 334 333 * @irq_count: Number of IRQs since last adaptive moderation decision 335 334 * @irq_mod_score: IRQ moderation score 336 335 * @rx_alloc_level: Watermark based heuristic counter for pushing descriptors ··· 359 360 unsigned int eventq_mask; 360 361 unsigned int eventq_read_ptr; 361 362 unsigned int last_eventq_read_ptr; 362 - unsigned int magic_count; 363 363 364 364 unsigned int irq_count; 365 365 unsigned int irq_mod_score;
+15 -7
drivers/net/sfc/nic.c
··· 84 84 static inline efx_qword_t *efx_event(struct efx_channel *channel, 85 85 unsigned int index) 86 86 { 87 - return ((efx_qword_t *) (channel->eventq.addr)) + index; 87 + return ((efx_qword_t *) (channel->eventq.addr)) + 88 + (index & channel->eventq_mask); 88 89 } 89 90 90 91 /* See if an event is present ··· 674 673 efx_dword_t reg; 675 674 struct efx_nic *efx = channel->efx; 676 675 677 - EFX_POPULATE_DWORD_1(reg, FRF_AZ_EVQ_RPTR, channel->eventq_read_ptr); 676 + EFX_POPULATE_DWORD_1(reg, FRF_AZ_EVQ_RPTR, 677 + channel->eventq_read_ptr & channel->eventq_mask); 678 678 efx_writed_table(efx, &reg, efx->type->evq_rptr_tbl_base, 679 679 channel->channel); 680 680 } ··· 908 906 909 907 code = EFX_QWORD_FIELD(*event, FSF_AZ_DRV_GEN_EV_MAGIC); 910 908 if (code == EFX_CHANNEL_MAGIC_TEST(channel)) 911 - ++channel->magic_count; 909 + ; /* ignore */ 912 910 else if (code == EFX_CHANNEL_MAGIC_FILL(channel)) 913 911 /* The queue must be empty, so we won't receive any rx 914 912 * events, so efx_process_channel() won't refill the ··· 1015 1013 /* Clear this event by marking it all ones */ 1016 1014 EFX_SET_QWORD(*p_event); 1017 1015 1018 - /* Increment read pointer */ 1019 - read_ptr = (read_ptr + 1) & channel->eventq_mask; 1016 + ++read_ptr; 1020 1017 1021 1018 ev_code = EFX_QWORD_FIELD(event, FSF_AZ_EV_CODE); 1022 1019 ··· 1059 1058 return spent; 1060 1059 } 1061 1060 1061 + /* Check whether an event is present in the eventq at the current 1062 + * read pointer. Only useful for self-test. 1063 + */ 1064 + bool efx_nic_event_present(struct efx_channel *channel) 1065 + { 1066 + return efx_event_present(efx_event(channel, channel->eventq_read_ptr)); 1067 + } 1062 1068 1063 1069 /* Allocate buffer table entries for event queue */ 1064 1070 int efx_nic_probe_eventq(struct efx_channel *channel) ··· 1171 1163 struct efx_tx_queue *tx_queue; 1172 1164 struct efx_rx_queue *rx_queue; 1173 1165 unsigned int read_ptr = channel->eventq_read_ptr; 1174 - unsigned int end_ptr = (read_ptr - 1) & channel->eventq_mask; 1166 + unsigned int end_ptr = read_ptr + channel->eventq_mask - 1; 1175 1167 1176 1168 do { 1177 1169 efx_qword_t *event = efx_event(channel, read_ptr); ··· 1211 1203 * it's ok to throw away every non-flush event */ 1212 1204 EFX_SET_QWORD(*event); 1213 1205 1214 - read_ptr = (read_ptr + 1) & channel->eventq_mask; 1206 + ++read_ptr; 1215 1207 } while (read_ptr != end_ptr); 1216 1208 1217 1209 channel->eventq_read_ptr = read_ptr;
+1
drivers/net/sfc/nic.h
··· 184 184 extern void efx_nic_remove_eventq(struct efx_channel *channel); 185 185 extern int efx_nic_process_eventq(struct efx_channel *channel, int rx_quota); 186 186 extern void efx_nic_eventq_read_ack(struct efx_channel *channel); 187 + extern bool efx_nic_event_present(struct efx_channel *channel); 187 188 188 189 /* MAC/PHY */ 189 190 extern void falcon_drain_tx_fifo(struct efx_nic *efx);
+6 -19
drivers/net/sfc/selftest.c
··· 131 131 static int efx_test_interrupts(struct efx_nic *efx, 132 132 struct efx_self_tests *tests) 133 133 { 134 - struct efx_channel *channel; 135 - 136 134 netif_dbg(efx, drv, efx->net_dev, "testing interrupts\n"); 137 135 tests->interrupt = -1; 138 136 139 137 /* Reset interrupt flag */ 140 138 efx->last_irq_cpu = -1; 141 139 smp_wmb(); 142 - 143 - /* ACK each interrupting event queue. Receiving an interrupt due to 144 - * traffic before a test event is raised is considered a pass */ 145 - efx_for_each_channel(channel, efx) { 146 - if (channel->work_pending) 147 - efx_process_channel_now(channel); 148 - if (efx->last_irq_cpu >= 0) 149 - goto success; 150 - } 151 140 152 141 efx_nic_generate_interrupt(efx); 153 142 ··· 162 173 struct efx_self_tests *tests) 163 174 { 164 175 struct efx_nic *efx = channel->efx; 165 - unsigned int magic_count, count; 176 + unsigned int read_ptr, count; 166 177 167 178 tests->eventq_dma[channel->channel] = -1; 168 179 tests->eventq_int[channel->channel] = -1; 169 180 tests->eventq_poll[channel->channel] = -1; 170 181 171 - magic_count = channel->magic_count; 182 + read_ptr = channel->eventq_read_ptr; 172 183 channel->efx->last_irq_cpu = -1; 173 184 smp_wmb(); 174 185 ··· 179 190 do { 180 191 schedule_timeout_uninterruptible(HZ / 100); 181 192 182 - if (channel->work_pending) 183 - efx_process_channel_now(channel); 184 - 185 - if (channel->magic_count != magic_count) 193 + if (ACCESS_ONCE(channel->eventq_read_ptr) != read_ptr) 186 194 goto eventq_ok; 187 195 } while (++count < 2); 188 196 ··· 197 211 } 198 212 199 213 /* Check to see if event was received even if interrupt wasn't */ 200 - efx_process_channel_now(channel); 201 - if (channel->magic_count != magic_count) { 214 + if (efx_nic_event_present(channel)) { 202 215 netif_err(efx, drv, efx->net_dev, 203 216 "channel %d event was generated, but " 204 217 "failed to trigger an interrupt\n", channel->channel); ··· 754 769 efx->loopback_mode = loopback_mode; 755 770 __efx_reconfigure_port(efx); 756 771 mutex_unlock(&efx->mac_lock); 772 + 773 + netif_tx_wake_all_queues(efx->net_dev); 757 774 758 775 return rc_test; 759 776 }
+2 -1
drivers/net/sfc/tx.c
··· 435 435 * queue state. */ 436 436 smp_mb(); 437 437 if (unlikely(netif_tx_queue_stopped(tx_queue->core_txq)) && 438 - likely(efx->port_enabled)) { 438 + likely(efx->port_enabled) && 439 + likely(!efx->port_inhibited)) { 439 440 fill_level = tx_queue->insert_count - tx_queue->read_count; 440 441 if (fill_level < EFX_TXQ_THRESHOLD(efx)) { 441 442 EFX_BUG_ON_PARANOID(!efx_dev_registered(efx));
+19 -4
drivers/net/sis900.c
··· 240 240 * @net_dev: the net device to get address for 241 241 * 242 242 * Older SiS900 and friends, use EEPROM to store MAC address. 243 - * MAC address is read from read_eeprom() into @net_dev->dev_addr. 243 + * MAC address is read from read_eeprom() into @net_dev->dev_addr and 244 + * @net_dev->perm_addr. 244 245 */ 245 246 246 247 static int __devinit sis900_get_mac_addr(struct pci_dev * pci_dev, struct net_device *net_dev) ··· 262 261 for (i = 0; i < 3; i++) 263 262 ((u16 *)(net_dev->dev_addr))[i] = read_eeprom(ioaddr, i+EEPROMMACAddr); 264 263 264 + /* Store MAC Address in perm_addr */ 265 + memcpy(net_dev->perm_addr, net_dev->dev_addr, ETH_ALEN); 266 + 265 267 return 1; 266 268 } 267 269 ··· 275 271 * 276 272 * SiS630E model, use APC CMOS RAM to store MAC address. 277 273 * APC CMOS RAM is accessed through ISA bridge. 278 - * MAC address is read into @net_dev->dev_addr. 274 + * MAC address is read into @net_dev->dev_addr and 275 + * @net_dev->perm_addr. 279 276 */ 280 277 281 278 static int __devinit sis630e_get_mac_addr(struct pci_dev * pci_dev, ··· 301 296 outb(0x09 + i, 0x70); 302 297 ((u8 *)(net_dev->dev_addr))[i] = inb(0x71); 303 298 } 299 + 300 + /* Store MAC Address in perm_addr */ 301 + memcpy(net_dev->perm_addr, net_dev->dev_addr, ETH_ALEN); 302 + 304 303 pci_write_config_byte(isa_bridge, 0x48, reg & ~0x40); 305 304 pci_dev_put(isa_bridge); 306 305 ··· 319 310 * 320 311 * SiS635 model, set MAC Reload Bit to load Mac address from APC 321 312 * to rfdr. rfdr is accessed through rfcr. MAC address is read into 322 - * @net_dev->dev_addr. 313 + * @net_dev->dev_addr and @net_dev->perm_addr. 323 314 */ 324 315 325 316 static int __devinit sis635_get_mac_addr(struct pci_dev * pci_dev, ··· 343 334 *( ((u16 *)net_dev->dev_addr) + i) = inw(ioaddr + rfdr); 344 335 } 345 336 337 + /* Store MAC Address in perm_addr */ 338 + memcpy(net_dev->perm_addr, net_dev->dev_addr, ETH_ALEN); 339 + 346 340 /* enable packet filtering */ 347 341 outl(rfcrSave | RFEN, rfcr + ioaddr); 348 342 ··· 365 353 * EEDONE signal to refuse EEPROM access by LAN. 366 354 * The EEPROM map of SiS962 or SiS963 is different to SiS900. 367 355 * The signature field in SiS962 or SiS963 spec is meaningless. 368 - * MAC address is read into @net_dev->dev_addr. 356 + * MAC address is read into @net_dev->dev_addr and @net_dev->perm_addr. 369 357 */ 370 358 371 359 static int __devinit sis96x_get_mac_addr(struct pci_dev * pci_dev, ··· 383 371 /* get MAC address from EEPROM */ 384 372 for (i = 0; i < 3; i++) 385 373 ((u16 *)(net_dev->dev_addr))[i] = read_eeprom(ioaddr, i+EEPROMMACAddr); 374 + 375 + /* Store MAC Address in perm_addr */ 376 + memcpy(net_dev->perm_addr, net_dev->dev_addr, ETH_ALEN); 386 377 387 378 outl(EEDONE, ee_addr); 388 379 return 1;
+2 -2
drivers/net/wireless/ath/ath9k/hif_usb.c
··· 1040 1040 } 1041 1041 1042 1042 ret = ath9k_htc_hw_init(hif_dev->htc_handle, 1043 - &hif_dev->udev->dev, hif_dev->device_id, 1043 + &interface->dev, hif_dev->device_id, 1044 1044 hif_dev->udev->product, id->driver_info); 1045 1045 if (ret) { 1046 1046 ret = -EINVAL; ··· 1158 1158 #endif 1159 1159 1160 1160 static struct usb_driver ath9k_hif_usb_driver = { 1161 - .name = "ath9k_hif_usb", 1161 + .name = KBUILD_MODNAME, 1162 1162 .probe = ath9k_hif_usb_probe, 1163 1163 .disconnect = ath9k_hif_usb_disconnect, 1164 1164 #ifdef CONFIG_PM
-9
drivers/net/wireless/ath/ath9k/hw.c
··· 1249 1249 ah->txchainmask = common->tx_chainmask; 1250 1250 ah->rxchainmask = common->rx_chainmask; 1251 1251 1252 - if ((common->bus_ops->ath_bus_type != ATH_USB) && !ah->chip_fullsleep) { 1253 - ath9k_hw_abortpcurecv(ah); 1254 - if (!ath9k_hw_stopdmarecv(ah)) { 1255 - ath_dbg(common, ATH_DBG_XMIT, 1256 - "Failed to stop receive dma\n"); 1257 - bChannelChange = false; 1258 - } 1259 - } 1260 - 1261 1252 if (!ath9k_hw_setpower(ah, ATH9K_PM_AWAKE)) 1262 1253 return -EIO; 1263 1254
+22 -3
drivers/net/wireless/ath/ath9k/mac.c
··· 710 710 } 711 711 EXPORT_SYMBOL(ath9k_hw_abortpcurecv); 712 712 713 - bool ath9k_hw_stopdmarecv(struct ath_hw *ah) 713 + bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset) 714 714 { 715 715 #define AH_RX_STOP_DMA_TIMEOUT 10000 /* usec */ 716 716 struct ath_common *common = ath9k_hw_common(ah); 717 + u32 mac_status, last_mac_status = 0; 717 718 int i; 719 + 720 + /* Enable access to the DMA observation bus */ 721 + REG_WRITE(ah, AR_MACMISC, 722 + ((AR_MACMISC_DMA_OBS_LINE_8 << AR_MACMISC_DMA_OBS_S) | 723 + (AR_MACMISC_MISC_OBS_BUS_1 << 724 + AR_MACMISC_MISC_OBS_BUS_MSB_S))); 718 725 719 726 REG_WRITE(ah, AR_CR, AR_CR_RXD); 720 727 ··· 729 722 for (i = AH_RX_STOP_DMA_TIMEOUT / AH_TIME_QUANTUM; i != 0; i--) { 730 723 if ((REG_READ(ah, AR_CR) & AR_CR_RXE) == 0) 731 724 break; 725 + 726 + if (!AR_SREV_9300_20_OR_LATER(ah)) { 727 + mac_status = REG_READ(ah, AR_DMADBG_7) & 0x7f0; 728 + if (mac_status == 0x1c0 && mac_status == last_mac_status) { 729 + *reset = true; 730 + break; 731 + } 732 + 733 + last_mac_status = mac_status; 734 + } 735 + 732 736 udelay(AH_TIME_QUANTUM); 733 737 } 734 738 735 739 if (i == 0) { 736 740 ath_err(common, 737 - "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x\n", 741 + "DMA failed to stop in %d ms AR_CR=0x%08x AR_DIAG_SW=0x%08x DMADBG_7=0x%08x\n", 738 742 AH_RX_STOP_DMA_TIMEOUT / 1000, 739 743 REG_READ(ah, AR_CR), 740 - REG_READ(ah, AR_DIAG_SW)); 744 + REG_READ(ah, AR_DIAG_SW), 745 + REG_READ(ah, AR_DMADBG_7)); 741 746 return false; 742 747 } else { 743 748 return true;
+1 -1
drivers/net/wireless/ath/ath9k/mac.h
··· 695 695 void ath9k_hw_putrxbuf(struct ath_hw *ah, u32 rxdp); 696 696 void ath9k_hw_startpcureceive(struct ath_hw *ah, bool is_scanning); 697 697 void ath9k_hw_abortpcurecv(struct ath_hw *ah); 698 - bool ath9k_hw_stopdmarecv(struct ath_hw *ah); 698 + bool ath9k_hw_stopdmarecv(struct ath_hw *ah, bool *reset); 699 699 int ath9k_hw_beaconq_setup(struct ath_hw *ah); 700 700 701 701 /* Interrupt Handling */
+3 -3
drivers/net/wireless/ath/ath9k/recv.c
··· 486 486 bool ath_stoprecv(struct ath_softc *sc) 487 487 { 488 488 struct ath_hw *ah = sc->sc_ah; 489 - bool stopped; 489 + bool stopped, reset = false; 490 490 491 491 spin_lock_bh(&sc->rx.rxbuflock); 492 492 ath9k_hw_abortpcurecv(ah); 493 493 ath9k_hw_setrxfilter(ah, 0); 494 - stopped = ath9k_hw_stopdmarecv(ah); 494 + stopped = ath9k_hw_stopdmarecv(ah, &reset); 495 495 496 496 if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) 497 497 ath_edma_stop_recv(sc); ··· 506 506 "confusing the DMA engine when we start RX up\n"); 507 507 ATH_DBG_WARN_ON_ONCE(!stopped); 508 508 } 509 - return stopped; 509 + return stopped || reset; 510 510 } 511 511 512 512 void ath_flushrecv(struct ath_softc *sc)
-2
drivers/net/wireless/iwlegacy/iwl-3945-hw.h
··· 74 74 /* RSSI to dBm */ 75 75 #define IWL39_RSSI_OFFSET 95 76 76 77 - #define IWL_DEFAULT_TX_POWER 0x0F 78 - 79 77 /* 80 78 * EEPROM related constants, enums, and structures. 81 79 */
-3
drivers/net/wireless/iwlegacy/iwl-4965-hw.h
··· 804 804 805 805 #define IWL4965_DEFAULT_TX_RETRY 15 806 806 807 - /* Limit range of txpower output target to be between these values */ 808 - #define IWL4965_TX_POWER_TARGET_POWER_MIN (0) /* 0 dBm: 1 milliwatt */ 809 - 810 807 /* EEPROM */ 811 808 #define IWL4965_FIRST_AMPDU_QUEUE 10 812 809
+11 -6
drivers/net/wireless/iwlegacy/iwl-core.c
··· 160 160 struct ieee80211_channel *geo_ch; 161 161 struct ieee80211_rate *rates; 162 162 int i = 0; 163 + s8 max_tx_power = 0; 163 164 164 165 if (priv->bands[IEEE80211_BAND_2GHZ].n_bitrates || 165 166 priv->bands[IEEE80211_BAND_5GHZ].n_bitrates) { ··· 236 235 237 236 geo_ch->flags |= ch->ht40_extension_channel; 238 237 239 - if (ch->max_power_avg > priv->tx_power_device_lmt) 240 - priv->tx_power_device_lmt = ch->max_power_avg; 238 + if (ch->max_power_avg > max_tx_power) 239 + max_tx_power = ch->max_power_avg; 241 240 } else { 242 241 geo_ch->flags |= IEEE80211_CHAN_DISABLED; 243 242 } ··· 249 248 "restricted" : "valid", 250 249 geo_ch->flags); 251 250 } 251 + 252 + priv->tx_power_device_lmt = max_tx_power; 253 + priv->tx_power_user_lmt = max_tx_power; 254 + priv->tx_power_next = max_tx_power; 252 255 253 256 if ((priv->bands[IEEE80211_BAND_5GHZ].n_channels == 0) && 254 257 priv->cfg->sku & IWL_SKU_A) { ··· 1129 1124 if (!priv->cfg->ops->lib->send_tx_power) 1130 1125 return -EOPNOTSUPP; 1131 1126 1132 - if (tx_power < IWL4965_TX_POWER_TARGET_POWER_MIN) { 1127 + /* 0 dBm mean 1 milliwatt */ 1128 + if (tx_power < 0) { 1133 1129 IWL_WARN(priv, 1134 - "Requested user TXPOWER %d below lower limit %d.\n", 1135 - tx_power, 1136 - IWL4965_TX_POWER_TARGET_POWER_MIN); 1130 + "Requested user TXPOWER %d below 1 mW.\n", 1131 + tx_power); 1137 1132 return -EINVAL; 1138 1133 } 1139 1134
-7
drivers/net/wireless/iwlegacy/iwl-eeprom.c
··· 471 471 flags & EEPROM_CHANNEL_RADAR)) 472 472 ? "" : "not "); 473 473 474 - /* Set the tx_power_user_lmt to the highest power 475 - * supported by any channel */ 476 - if (eeprom_ch_info[ch].max_power_avg > 477 - priv->tx_power_user_lmt) 478 - priv->tx_power_user_lmt = 479 - eeprom_ch_info[ch].max_power_avg; 480 - 481 474 ch_info++; 482 475 } 483 476 }
-4
drivers/net/wireless/iwlegacy/iwl3945-base.c
··· 3825 3825 priv->force_reset[IWL_FW_RESET].reset_duration = 3826 3826 IWL_DELAY_NEXT_FORCE_FW_RELOAD; 3827 3827 3828 - 3829 - priv->tx_power_user_lmt = IWL_DEFAULT_TX_POWER; 3830 - priv->tx_power_next = IWL_DEFAULT_TX_POWER; 3831 - 3832 3828 if (eeprom->version < EEPROM_3945_EEPROM_VERSION) { 3833 3829 IWL_WARN(priv, "Unsupported EEPROM version: 0x%04X\n", 3834 3830 eeprom->version);
-6
drivers/net/wireless/iwlegacy/iwl4965-base.c
··· 3140 3140 3141 3141 iwl_legacy_init_scan_params(priv); 3142 3142 3143 - /* Set the tx_power_user_lmt to the lowest power level 3144 - * this value will get overwritten by channel max power avg 3145 - * from eeprom */ 3146 - priv->tx_power_user_lmt = IWL4965_TX_POWER_TARGET_POWER_MIN; 3147 - priv->tx_power_next = IWL4965_TX_POWER_TARGET_POWER_MIN; 3148 - 3149 3143 ret = iwl_legacy_init_channel_map(priv); 3150 3144 if (ret) { 3151 3145 IWL_ERR(priv, "initializing regulatory failed: %d\n", ret);
+2 -2
include/linux/usb/usbnet.h
··· 103 103 * Indicates to usbnet, that USB driver accumulates multiple IP packets. 104 104 * Affects statistic (counters) and short packet handling. 105 105 */ 106 - #define FLAG_MULTI_PACKET 0x1000 107 - #define FLAG_RX_ASSEMBLE 0x2000 /* rx packets may span >1 frames */ 106 + #define FLAG_MULTI_PACKET 0x2000 107 + #define FLAG_RX_ASSEMBLE 0x4000 /* rx packets may span >1 frames */ 108 108 109 109 /* init device ... can sleep, or cause probe() failure */ 110 110 int (*bind)(struct usbnet *, struct usb_interface *);
+2 -4
net/bridge/br_netfilter.c
··· 249 249 goto drop; 250 250 } 251 251 252 - /* Zero out the CB buffer if no options present */ 253 - if (iph->ihl == 5) { 254 - memset(IPCB(skb), 0, sizeof(struct inet_skb_parm)); 252 + memset(IPCB(skb), 0, sizeof(struct inet_skb_parm)); 253 + if (iph->ihl == 5) 255 254 return 0; 256 - } 257 255 258 256 opt->optlen = iph->ihl*4 - sizeof(struct iphdr); 259 257 if (ip_options_compile(dev_net(dev), opt, skb))
+7 -3
net/core/dev.c
··· 5209 5209 } 5210 5210 5211 5211 /* TSO requires that SG is present as well. */ 5212 - if ((features & NETIF_F_TSO) && !(features & NETIF_F_SG)) { 5213 - netdev_info(dev, "Dropping NETIF_F_TSO since no SG feature.\n"); 5214 - features &= ~NETIF_F_TSO; 5212 + if ((features & NETIF_F_ALL_TSO) && !(features & NETIF_F_SG)) { 5213 + netdev_info(dev, "Dropping TSO features since no SG feature.\n"); 5214 + features &= ~NETIF_F_ALL_TSO; 5215 5215 } 5216 + 5217 + /* TSO ECN requires that TSO is present as well. */ 5218 + if ((features & NETIF_F_ALL_TSO) == NETIF_F_TSO_ECN) 5219 + features &= ~NETIF_F_TSO_ECN; 5216 5220 5217 5221 /* Software GSO depends on SG. */ 5218 5222 if ((features & NETIF_F_GSO) && !(features & NETIF_F_SG)) {
-2
net/ieee802154/Makefile
··· 1 1 obj-$(CONFIG_IEEE802154) += ieee802154.o af_802154.o 2 2 ieee802154-y := netlink.o nl-mac.o nl-phy.o nl_policy.o wpan-class.o 3 3 af_802154-y := af_ieee802154.o raw.o dgram.o 4 - 5 - ccflags-y += -Wall -DDEBUG
+2 -3
net/ipv4/inet_connection_sock.c
··· 73 73 !sk2->sk_bound_dev_if || 74 74 sk->sk_bound_dev_if == sk2->sk_bound_dev_if)) { 75 75 if (!reuse || !sk2->sk_reuse || 76 - ((1 << sk2->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))) { 76 + sk2->sk_state == TCP_LISTEN) { 77 77 const __be32 sk2_rcv_saddr = sk_rcv_saddr(sk2); 78 78 if (!sk2_rcv_saddr || !sk_rcv_saddr(sk) || 79 79 sk2_rcv_saddr == sk_rcv_saddr(sk)) ··· 122 122 (tb->num_owners < smallest_size || smallest_size == -1)) { 123 123 smallest_size = tb->num_owners; 124 124 smallest_rover = rover; 125 - if (atomic_read(&hashinfo->bsockets) > (high - low) + 1 && 126 - !inet_csk(sk)->icsk_af_ops->bind_conflict(sk, tb)) { 125 + if (atomic_read(&hashinfo->bsockets) > (high - low) + 1) { 127 126 spin_unlock(&head->lock); 128 127 snum = smallest_rover; 129 128 goto have_snum;
+7 -6
net/ipv4/inetpeer.c
··· 354 354 } 355 355 356 356 /* May be called with local BH enabled. */ 357 - static void unlink_from_pool(struct inet_peer *p, struct inet_peer_base *base) 357 + static void unlink_from_pool(struct inet_peer *p, struct inet_peer_base *base, 358 + struct inet_peer __rcu **stack[PEER_MAXDEPTH]) 358 359 { 359 360 int do_free; 360 361 ··· 369 368 * We use refcnt=-1 to alert lockless readers this entry is deleted. 370 369 */ 371 370 if (atomic_cmpxchg(&p->refcnt, 1, -1) == 1) { 372 - struct inet_peer __rcu **stack[PEER_MAXDEPTH]; 373 371 struct inet_peer __rcu ***stackptr, ***delp; 374 372 if (lookup(&p->daddr, stack, base) != p) 375 373 BUG(); ··· 422 422 } 423 423 424 424 /* May be called with local BH enabled. */ 425 - static int cleanup_once(unsigned long ttl) 425 + static int cleanup_once(unsigned long ttl, struct inet_peer __rcu **stack[PEER_MAXDEPTH]) 426 426 { 427 427 struct inet_peer *p = NULL; 428 428 ··· 454 454 * happen because of entry limits in route cache. */ 455 455 return -1; 456 456 457 - unlink_from_pool(p, peer_to_base(p)); 457 + unlink_from_pool(p, peer_to_base(p), stack); 458 458 return 0; 459 459 } 460 460 ··· 524 524 525 525 if (base->total >= inet_peer_threshold) 526 526 /* Remove one less-recently-used entry. */ 527 - cleanup_once(0); 527 + cleanup_once(0, stack); 528 528 529 529 return p; 530 530 } ··· 540 540 { 541 541 unsigned long now = jiffies; 542 542 int ttl, total; 543 + struct inet_peer __rcu **stack[PEER_MAXDEPTH]; 543 544 544 545 total = compute_total(); 545 546 if (total >= inet_peer_threshold) ··· 549 548 ttl = inet_peer_maxttl 550 549 - (inet_peer_maxttl - inet_peer_minttl) / HZ * 551 550 total / inet_peer_threshold * HZ; 552 - while (!cleanup_once(ttl)) { 551 + while (!cleanup_once(ttl, stack)) { 553 552 if (jiffies != now) 554 553 break; 555 554 }
+3 -3
net/ipv4/ip_options.c
··· 329 329 pp_ptr = optptr + 2; 330 330 goto error; 331 331 } 332 - if (skb) { 332 + if (rt) { 333 333 memcpy(&optptr[optptr[2]-1], &rt->rt_spec_dst, 4); 334 334 opt->is_changed = 1; 335 335 } ··· 371 371 goto error; 372 372 } 373 373 opt->ts = optptr - iph; 374 - if (skb) { 374 + if (rt) { 375 375 memcpy(&optptr[optptr[2]-1], &rt->rt_spec_dst, 4); 376 376 timeptr = (__be32*)&optptr[optptr[2]+3]; 377 377 } ··· 603 603 unsigned long orefdst; 604 604 int err; 605 605 606 - if (!opt->srr) 606 + if (!opt->srr || !rt) 607 607 return 0; 608 608 609 609 if (skb->pkt_type != PACKET_HOST)
-3
net/ipv4/sysctl_net_ipv4.c
··· 311 311 .mode = 0644, 312 312 .proc_handler = proc_do_large_bitmap, 313 313 }, 314 - #ifdef CONFIG_IP_MULTICAST 315 314 { 316 315 .procname = "igmp_max_memberships", 317 316 .data = &sysctl_igmp_max_memberships, ··· 318 319 .mode = 0644, 319 320 .proc_handler = proc_dointvec 320 321 }, 321 - 322 - #endif 323 322 { 324 323 .procname = "igmp_max_msf", 325 324 .data = &sysctl_igmp_max_msf,
+1 -1
net/ipv6/inet6_connection_sock.c
··· 44 44 !sk2->sk_bound_dev_if || 45 45 sk->sk_bound_dev_if == sk2->sk_bound_dev_if) && 46 46 (!sk->sk_reuse || !sk2->sk_reuse || 47 - ((1 << sk2->sk_state) & (TCPF_LISTEN | TCPF_CLOSE))) && 47 + sk2->sk_state == TCP_LISTEN) && 48 48 ipv6_rcv_saddr_equal(sk, sk2)) 49 49 break; 50 50 }
+1 -2
net/irda/af_irda.c
··· 1297 1297 /* Note : socket.c set MSG_EOR on SEQPACKET sockets */ 1298 1298 if (msg->msg_flags & ~(MSG_DONTWAIT | MSG_EOR | MSG_CMSG_COMPAT | 1299 1299 MSG_NOSIGNAL)) { 1300 - err = -EINVAL; 1301 - goto out; 1300 + return -EINVAL; 1302 1301 } 1303 1302 1304 1303 lock_sock(sk);
+1 -2
net/llc/llc_input.c
··· 121 121 s32 data_size = ntohs(pdulen) - llc_len; 122 122 123 123 if (data_size < 0 || 124 - ((skb_tail_pointer(skb) - 125 - (u8 *)pdu) - llc_len) < data_size) 124 + !pskb_may_pull(skb, data_size)) 126 125 return 0; 127 126 if (unlikely(pskb_trim_rcsum(skb, data_size))) 128 127 return 0;
+4
net/sctp/associola.c
··· 569 569 sctp_assoc_set_primary(asoc, transport); 570 570 if (asoc->peer.active_path == peer) 571 571 asoc->peer.active_path = transport; 572 + if (asoc->peer.retran_path == peer) 573 + asoc->peer.retran_path = transport; 572 574 if (asoc->peer.last_data_from == peer) 573 575 asoc->peer.last_data_from = transport; 574 576 ··· 1325 1323 1326 1324 if (t) 1327 1325 asoc->peer.retran_path = t; 1326 + else 1327 + t = asoc->peer.retran_path; 1328 1328 1329 1329 SCTP_DEBUG_PRINTK_IPADDR("sctp_assoc_update_retran_path:association" 1330 1330 " %p addr: ",