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

Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net

Minor conflict with the DSA legacy code removal.

Signed-off-by: David S. Miller <davem@davemloft.net>

+293 -115
+1 -1
Documentation/devicetree/bindings/net/ethernet.txt
··· 38 38 * "smii" 39 39 * "xgmii" 40 40 * "trgmii" 41 - * "2000base-x", 41 + * "1000base-x", 42 42 * "2500base-x", 43 43 * "rxaui" 44 44 * "xaui"
+172 -64
arch/x86/net/bpf_jit_comp32.c
··· 117 117 #define IA32_JLE 0x7E 118 118 #define IA32_JG 0x7F 119 119 120 + #define COND_JMP_OPCODE_INVALID (0xFF) 121 + 120 122 /* 121 123 * Map eBPF registers to IA32 32bit registers or stack scratch space. 122 124 * ··· 700 698 STACK_VAR(dst_hi)); 701 699 } 702 700 703 - /* xor ecx,ecx */ 704 - EMIT2(0x31, add_2reg(0xC0, IA32_ECX, IA32_ECX)); 705 - /* sub dreg_lo,ecx */ 706 - EMIT2(0x2B, add_2reg(0xC0, dreg_lo, IA32_ECX)); 707 - /* mov dreg_lo,ecx */ 708 - EMIT2(0x89, add_2reg(0xC0, dreg_lo, IA32_ECX)); 709 - 710 - /* xor ecx,ecx */ 711 - EMIT2(0x31, add_2reg(0xC0, IA32_ECX, IA32_ECX)); 712 - /* sbb dreg_hi,ecx */ 713 - EMIT2(0x19, add_2reg(0xC0, dreg_hi, IA32_ECX)); 714 - /* mov dreg_hi,ecx */ 715 - EMIT2(0x89, add_2reg(0xC0, dreg_hi, IA32_ECX)); 701 + /* neg dreg_lo */ 702 + EMIT2(0xF7, add_1reg(0xD8, dreg_lo)); 703 + /* adc dreg_hi,0x0 */ 704 + EMIT3(0x83, add_1reg(0xD0, dreg_hi), 0x00); 705 + /* neg dreg_hi */ 706 + EMIT2(0xF7, add_1reg(0xD8, dreg_hi)); 716 707 717 708 if (dstk) { 718 709 /* mov dword ptr [ebp+off],dreg_lo */ ··· 1608 1613 *pprog = prog; 1609 1614 } 1610 1615 1616 + static u8 get_cond_jmp_opcode(const u8 op, bool is_cmp_lo) 1617 + { 1618 + u8 jmp_cond; 1619 + 1620 + /* Convert BPF opcode to x86 */ 1621 + switch (op) { 1622 + case BPF_JEQ: 1623 + jmp_cond = IA32_JE; 1624 + break; 1625 + case BPF_JSET: 1626 + case BPF_JNE: 1627 + jmp_cond = IA32_JNE; 1628 + break; 1629 + case BPF_JGT: 1630 + /* GT is unsigned '>', JA in x86 */ 1631 + jmp_cond = IA32_JA; 1632 + break; 1633 + case BPF_JLT: 1634 + /* LT is unsigned '<', JB in x86 */ 1635 + jmp_cond = IA32_JB; 1636 + break; 1637 + case BPF_JGE: 1638 + /* GE is unsigned '>=', JAE in x86 */ 1639 + jmp_cond = IA32_JAE; 1640 + break; 1641 + case BPF_JLE: 1642 + /* LE is unsigned '<=', JBE in x86 */ 1643 + jmp_cond = IA32_JBE; 1644 + break; 1645 + case BPF_JSGT: 1646 + if (!is_cmp_lo) 1647 + /* Signed '>', GT in x86 */ 1648 + jmp_cond = IA32_JG; 1649 + else 1650 + /* GT is unsigned '>', JA in x86 */ 1651 + jmp_cond = IA32_JA; 1652 + break; 1653 + case BPF_JSLT: 1654 + if (!is_cmp_lo) 1655 + /* Signed '<', LT in x86 */ 1656 + jmp_cond = IA32_JL; 1657 + else 1658 + /* LT is unsigned '<', JB in x86 */ 1659 + jmp_cond = IA32_JB; 1660 + break; 1661 + case BPF_JSGE: 1662 + if (!is_cmp_lo) 1663 + /* Signed '>=', GE in x86 */ 1664 + jmp_cond = IA32_JGE; 1665 + else 1666 + /* GE is unsigned '>=', JAE in x86 */ 1667 + jmp_cond = IA32_JAE; 1668 + break; 1669 + case BPF_JSLE: 1670 + if (!is_cmp_lo) 1671 + /* Signed '<=', LE in x86 */ 1672 + jmp_cond = IA32_JLE; 1673 + else 1674 + /* LE is unsigned '<=', JBE in x86 */ 1675 + jmp_cond = IA32_JBE; 1676 + break; 1677 + default: /* to silence GCC warning */ 1678 + jmp_cond = COND_JMP_OPCODE_INVALID; 1679 + break; 1680 + } 1681 + 1682 + return jmp_cond; 1683 + } 1684 + 1611 1685 static int do_jit(struct bpf_prog *bpf_prog, int *addrs, u8 *image, 1612 1686 int oldproglen, struct jit_context *ctx) 1613 1687 { ··· 2133 2069 case BPF_JMP | BPF_JLT | BPF_X: 2134 2070 case BPF_JMP | BPF_JGE | BPF_X: 2135 2071 case BPF_JMP | BPF_JLE | BPF_X: 2136 - case BPF_JMP | BPF_JSGT | BPF_X: 2137 - case BPF_JMP | BPF_JSLE | BPF_X: 2138 - case BPF_JMP | BPF_JSLT | BPF_X: 2139 - case BPF_JMP | BPF_JSGE | BPF_X: 2140 2072 case BPF_JMP32 | BPF_JEQ | BPF_X: 2141 2073 case BPF_JMP32 | BPF_JNE | BPF_X: 2142 2074 case BPF_JMP32 | BPF_JGT | BPF_X: ··· 2177 2117 /* cmp dreg_lo,sreg_lo */ 2178 2118 EMIT2(0x39, add_2reg(0xC0, dreg_lo, sreg_lo)); 2179 2119 goto emit_cond_jmp; 2120 + } 2121 + case BPF_JMP | BPF_JSGT | BPF_X: 2122 + case BPF_JMP | BPF_JSLE | BPF_X: 2123 + case BPF_JMP | BPF_JSLT | BPF_X: 2124 + case BPF_JMP | BPF_JSGE | BPF_X: { 2125 + u8 dreg_lo = dstk ? IA32_EAX : dst_lo; 2126 + u8 dreg_hi = dstk ? IA32_EDX : dst_hi; 2127 + u8 sreg_lo = sstk ? IA32_ECX : src_lo; 2128 + u8 sreg_hi = sstk ? IA32_EBX : src_hi; 2129 + 2130 + if (dstk) { 2131 + EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), 2132 + STACK_VAR(dst_lo)); 2133 + EMIT3(0x8B, 2134 + add_2reg(0x40, IA32_EBP, 2135 + IA32_EDX), 2136 + STACK_VAR(dst_hi)); 2137 + } 2138 + 2139 + if (sstk) { 2140 + EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_ECX), 2141 + STACK_VAR(src_lo)); 2142 + EMIT3(0x8B, 2143 + add_2reg(0x40, IA32_EBP, 2144 + IA32_EBX), 2145 + STACK_VAR(src_hi)); 2146 + } 2147 + 2148 + /* cmp dreg_hi,sreg_hi */ 2149 + EMIT2(0x39, add_2reg(0xC0, dreg_hi, sreg_hi)); 2150 + EMIT2(IA32_JNE, 10); 2151 + /* cmp dreg_lo,sreg_lo */ 2152 + EMIT2(0x39, add_2reg(0xC0, dreg_lo, sreg_lo)); 2153 + goto emit_cond_jmp_signed; 2180 2154 } 2181 2155 case BPF_JMP | BPF_JSET | BPF_X: 2182 2156 case BPF_JMP32 | BPF_JSET | BPF_X: { ··· 2288 2194 case BPF_JMP | BPF_JLT | BPF_K: 2289 2195 case BPF_JMP | BPF_JGE | BPF_K: 2290 2196 case BPF_JMP | BPF_JLE | BPF_K: 2291 - case BPF_JMP | BPF_JSGT | BPF_K: 2292 - case BPF_JMP | BPF_JSLE | BPF_K: 2293 - case BPF_JMP | BPF_JSLT | BPF_K: 2294 - case BPF_JMP | BPF_JSGE | BPF_K: 2295 2197 case BPF_JMP32 | BPF_JEQ | BPF_K: 2296 2198 case BPF_JMP32 | BPF_JNE | BPF_K: 2297 2199 case BPF_JMP32 | BPF_JGT | BPF_K: ··· 2328 2238 /* cmp dreg_lo,sreg_lo */ 2329 2239 EMIT2(0x39, add_2reg(0xC0, dreg_lo, sreg_lo)); 2330 2240 2331 - emit_cond_jmp: /* Convert BPF opcode to x86 */ 2332 - switch (BPF_OP(code)) { 2333 - case BPF_JEQ: 2334 - jmp_cond = IA32_JE; 2335 - break; 2336 - case BPF_JSET: 2337 - case BPF_JNE: 2338 - jmp_cond = IA32_JNE; 2339 - break; 2340 - case BPF_JGT: 2341 - /* GT is unsigned '>', JA in x86 */ 2342 - jmp_cond = IA32_JA; 2343 - break; 2344 - case BPF_JLT: 2345 - /* LT is unsigned '<', JB in x86 */ 2346 - jmp_cond = IA32_JB; 2347 - break; 2348 - case BPF_JGE: 2349 - /* GE is unsigned '>=', JAE in x86 */ 2350 - jmp_cond = IA32_JAE; 2351 - break; 2352 - case BPF_JLE: 2353 - /* LE is unsigned '<=', JBE in x86 */ 2354 - jmp_cond = IA32_JBE; 2355 - break; 2356 - case BPF_JSGT: 2357 - /* Signed '>', GT in x86 */ 2358 - jmp_cond = IA32_JG; 2359 - break; 2360 - case BPF_JSLT: 2361 - /* Signed '<', LT in x86 */ 2362 - jmp_cond = IA32_JL; 2363 - break; 2364 - case BPF_JSGE: 2365 - /* Signed '>=', GE in x86 */ 2366 - jmp_cond = IA32_JGE; 2367 - break; 2368 - case BPF_JSLE: 2369 - /* Signed '<=', LE in x86 */ 2370 - jmp_cond = IA32_JLE; 2371 - break; 2372 - default: /* to silence GCC warning */ 2241 + emit_cond_jmp: jmp_cond = get_cond_jmp_opcode(BPF_OP(code), false); 2242 + if (jmp_cond == COND_JMP_OPCODE_INVALID) 2373 2243 return -EFAULT; 2374 - } 2375 2244 jmp_offset = addrs[i + insn->off] - addrs[i]; 2376 2245 if (is_imm8(jmp_offset)) { 2377 2246 EMIT2(jmp_cond, jmp_offset); ··· 2340 2291 pr_err("cond_jmp gen bug %llx\n", jmp_offset); 2341 2292 return -EFAULT; 2342 2293 } 2294 + break; 2295 + } 2296 + case BPF_JMP | BPF_JSGT | BPF_K: 2297 + case BPF_JMP | BPF_JSLE | BPF_K: 2298 + case BPF_JMP | BPF_JSLT | BPF_K: 2299 + case BPF_JMP | BPF_JSGE | BPF_K: { 2300 + u8 dreg_lo = dstk ? IA32_EAX : dst_lo; 2301 + u8 dreg_hi = dstk ? IA32_EDX : dst_hi; 2302 + u8 sreg_lo = IA32_ECX; 2303 + u8 sreg_hi = IA32_EBX; 2304 + u32 hi; 2343 2305 2306 + if (dstk) { 2307 + EMIT3(0x8B, add_2reg(0x40, IA32_EBP, IA32_EAX), 2308 + STACK_VAR(dst_lo)); 2309 + EMIT3(0x8B, 2310 + add_2reg(0x40, IA32_EBP, 2311 + IA32_EDX), 2312 + STACK_VAR(dst_hi)); 2313 + } 2314 + 2315 + /* mov ecx,imm32 */ 2316 + EMIT2_off32(0xC7, add_1reg(0xC0, IA32_ECX), imm32); 2317 + hi = imm32 & (1 << 31) ? (u32)~0 : 0; 2318 + /* mov ebx,imm32 */ 2319 + EMIT2_off32(0xC7, add_1reg(0xC0, IA32_EBX), hi); 2320 + /* cmp dreg_hi,sreg_hi */ 2321 + EMIT2(0x39, add_2reg(0xC0, dreg_hi, sreg_hi)); 2322 + EMIT2(IA32_JNE, 10); 2323 + /* cmp dreg_lo,sreg_lo */ 2324 + EMIT2(0x39, add_2reg(0xC0, dreg_lo, sreg_lo)); 2325 + 2326 + /* 2327 + * For simplicity of branch offset computation, 2328 + * let's use fixed jump coding here. 2329 + */ 2330 + emit_cond_jmp_signed: /* Check the condition for low 32-bit comparison */ 2331 + jmp_cond = get_cond_jmp_opcode(BPF_OP(code), true); 2332 + if (jmp_cond == COND_JMP_OPCODE_INVALID) 2333 + return -EFAULT; 2334 + jmp_offset = addrs[i + insn->off] - addrs[i] + 8; 2335 + if (is_simm32(jmp_offset)) { 2336 + EMIT2_off32(0x0F, jmp_cond + 0x10, jmp_offset); 2337 + } else { 2338 + pr_err("cond_jmp gen bug %llx\n", jmp_offset); 2339 + return -EFAULT; 2340 + } 2341 + EMIT2(0xEB, 6); 2342 + 2343 + /* Check the condition for high 32-bit comparison */ 2344 + jmp_cond = get_cond_jmp_opcode(BPF_OP(code), false); 2345 + if (jmp_cond == COND_JMP_OPCODE_INVALID) 2346 + return -EFAULT; 2347 + jmp_offset = addrs[i + insn->off] - addrs[i]; 2348 + if (is_simm32(jmp_offset)) { 2349 + EMIT2_off32(0x0F, jmp_cond + 0x10, jmp_offset); 2350 + } else { 2351 + pr_err("cond_jmp gen bug %llx\n", jmp_offset); 2352 + return -EFAULT; 2353 + } 2344 2354 break; 2345 2355 } 2346 2356 case BPF_JMP | BPF_JA:
+5 -4
drivers/isdn/gigaset/bas-gigaset.c
··· 958 958 */ 959 959 static int starturbs(struct bc_state *bcs) 960 960 { 961 + struct usb_device *udev = bcs->cs->hw.bas->udev; 961 962 struct bas_bc_state *ubc = bcs->hw.bas; 962 963 struct urb *urb; 963 964 int j, k; ··· 976 975 rc = -EFAULT; 977 976 goto error; 978 977 } 979 - usb_fill_int_urb(urb, bcs->cs->hw.bas->udev, 980 - usb_rcvisocpipe(urb->dev, 3 + 2 * bcs->channel), 978 + usb_fill_int_urb(urb, udev, 979 + usb_rcvisocpipe(udev, 3 + 2 * bcs->channel), 981 980 ubc->isoinbuf + k * BAS_INBUFSIZE, 982 981 BAS_INBUFSIZE, read_iso_callback, bcs, 983 982 BAS_FRAMETIME); ··· 1007 1006 rc = -EFAULT; 1008 1007 goto error; 1009 1008 } 1010 - usb_fill_int_urb(urb, bcs->cs->hw.bas->udev, 1011 - usb_sndisocpipe(urb->dev, 4 + 2 * bcs->channel), 1009 + usb_fill_int_urb(urb, udev, 1010 + usb_sndisocpipe(udev, 4 + 2 * bcs->channel), 1012 1011 ubc->isooutbuf->data, 1013 1012 sizeof(ubc->isooutbuf->data), 1014 1013 write_iso_callback, &ubc->isoouturbs[k],
+8 -3
drivers/net/ethernet/amazon/ena/ena_com.c
··· 731 731 if (rc) 732 732 pr_err("Cannot set LLQ configuration: %d\n", rc); 733 733 734 - return 0; 734 + return rc; 735 735 } 736 736 737 737 static int ena_com_wait_and_process_admin_cq_interrupts(struct ena_comp_ctx *comp_ctx, ··· 2195 2195 if (unlikely(ret)) 2196 2196 return ret; 2197 2197 2198 - if (get_resp.u.flow_hash_func.supported_func & (1 << rss->hash_func)) { 2198 + if (!(get_resp.u.flow_hash_func.supported_func & BIT(rss->hash_func))) { 2199 2199 pr_err("Func hash %d isn't supported by device, abort\n", 2200 2200 rss->hash_func); 2201 2201 return -EOPNOTSUPP; ··· 2280 2280 return -EINVAL; 2281 2281 } 2282 2282 2283 + rss->hash_func = func; 2283 2284 rc = ena_com_set_hash_function(ena_dev); 2284 2285 2285 2286 /* Restore the old function */ ··· 2803 2802 /* if moderation is supported by device we set adaptive moderation */ 2804 2803 delay_resolution = get_resp.u.intr_moderation.intr_delay_resolution; 2805 2804 ena_com_update_intr_delay_resolution(ena_dev, delay_resolution); 2806 - ena_com_enable_adaptive_moderation(ena_dev); 2805 + 2806 + /* Disable adaptive moderation by default - can be enabled from 2807 + * ethtool 2808 + */ 2809 + ena_com_disable_adaptive_moderation(ena_dev); 2807 2810 2808 2811 return 0; 2809 2812 err:
+2 -2
drivers/net/ethernet/amazon/ena/ena_ethtool.c
··· 697 697 if (indir) { 698 698 for (i = 0; i < ENA_RX_RSS_TABLE_SIZE; i++) { 699 699 rc = ena_com_indirect_table_fill_entry(ena_dev, 700 - ENA_IO_RXQ_IDX(indir[i]), 701 - i); 700 + i, 701 + ENA_IO_RXQ_IDX(indir[i])); 702 702 if (unlikely(rc)) { 703 703 netif_err(adapter, drv, netdev, 704 704 "Cannot fill indirect table (index is too large)\n");
+17 -11
drivers/net/ethernet/amazon/ena/ena_netdev.c
··· 224 224 if (!tx_ring->tx_buffer_info) { 225 225 tx_ring->tx_buffer_info = vzalloc(size); 226 226 if (!tx_ring->tx_buffer_info) 227 - return -ENOMEM; 227 + goto err_tx_buffer_info; 228 228 } 229 229 230 230 size = sizeof(u16) * tx_ring->ring_size; 231 231 tx_ring->free_tx_ids = vzalloc_node(size, node); 232 232 if (!tx_ring->free_tx_ids) { 233 233 tx_ring->free_tx_ids = vzalloc(size); 234 - if (!tx_ring->free_tx_ids) { 235 - vfree(tx_ring->tx_buffer_info); 236 - return -ENOMEM; 237 - } 234 + if (!tx_ring->free_tx_ids) 235 + goto err_free_tx_ids; 238 236 } 239 237 240 238 size = tx_ring->tx_max_header_size; 241 239 tx_ring->push_buf_intermediate_buf = vzalloc_node(size, node); 242 240 if (!tx_ring->push_buf_intermediate_buf) { 243 241 tx_ring->push_buf_intermediate_buf = vzalloc(size); 244 - if (!tx_ring->push_buf_intermediate_buf) { 245 - vfree(tx_ring->tx_buffer_info); 246 - vfree(tx_ring->free_tx_ids); 247 - return -ENOMEM; 248 - } 242 + if (!tx_ring->push_buf_intermediate_buf) 243 + goto err_push_buf_intermediate_buf; 249 244 } 250 245 251 246 /* Req id ring for TX out of order completions */ ··· 254 259 tx_ring->next_to_clean = 0; 255 260 tx_ring->cpu = ena_irq->cpu; 256 261 return 0; 262 + 263 + err_push_buf_intermediate_buf: 264 + vfree(tx_ring->free_tx_ids); 265 + tx_ring->free_tx_ids = NULL; 266 + err_free_tx_ids: 267 + vfree(tx_ring->tx_buffer_info); 268 + tx_ring->tx_buffer_info = NULL; 269 + err_tx_buffer_info: 270 + return -ENOMEM; 257 271 } 258 272 259 273 /* ena_free_tx_resources - Free I/O Tx Resources per Queue ··· 382 378 rx_ring->free_rx_ids = vzalloc(size); 383 379 if (!rx_ring->free_rx_ids) { 384 380 vfree(rx_ring->rx_buffer_info); 381 + rx_ring->rx_buffer_info = NULL; 385 382 return -ENOMEM; 386 383 } 387 384 } ··· 1825 1820 err_setup_tx: 1826 1821 ena_free_io_irq(adapter); 1827 1822 err_req_irq: 1823 + ena_del_napi(adapter); 1828 1824 1829 1825 return rc; 1830 1826 } ··· 2297 2291 host_info->bdf = (pdev->bus->number << 8) | pdev->devfn; 2298 2292 host_info->os_type = ENA_ADMIN_OS_LINUX; 2299 2293 host_info->kernel_ver = LINUX_VERSION_CODE; 2300 - strncpy(host_info->kernel_ver_str, utsname()->version, 2294 + strlcpy(host_info->kernel_ver_str, utsname()->version, 2301 2295 sizeof(host_info->kernel_ver_str) - 1); 2302 2296 host_info->os_dist = 0; 2303 2297 strncpy(host_info->os_dist_str, utsname()->release,
+3 -3
drivers/net/ethernet/cadence/macb_main.c
··· 2427 2427 goto pm_exit; 2428 2428 } 2429 2429 2430 - bp->macbgem_ops.mog_init_rings(bp); 2431 - macb_init_hw(bp); 2432 - 2433 2430 for (q = 0, queue = bp->queues; q < bp->num_queues; ++q, ++queue) 2434 2431 napi_enable(&queue->napi); 2432 + 2433 + bp->macbgem_ops.mog_init_rings(bp); 2434 + macb_init_hw(bp); 2435 2435 2436 2436 /* schedule a link state check */ 2437 2437 phy_start(dev->phydev);
+12 -3
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
··· 6160 6160 6161 6161 ret = pci_register_driver(&cxgb4_driver); 6162 6162 if (ret < 0) 6163 - debugfs_remove(cxgb4_debugfs_root); 6163 + goto err_pci; 6164 6164 6165 6165 #if IS_ENABLED(CONFIG_IPV6) 6166 6166 if (!inet6addr_registered) { 6167 - register_inet6addr_notifier(&cxgb4_inet6addr_notifier); 6168 - inet6addr_registered = true; 6167 + ret = register_inet6addr_notifier(&cxgb4_inet6addr_notifier); 6168 + if (ret) 6169 + pci_unregister_driver(&cxgb4_driver); 6170 + else 6171 + inet6addr_registered = true; 6169 6172 } 6170 6173 #endif 6174 + 6175 + if (ret == 0) 6176 + return ret; 6177 + 6178 + err_pci: 6179 + debugfs_remove(cxgb4_debugfs_root); 6171 6180 6172 6181 return ret; 6173 6182 }
+1 -1
drivers/net/ethernet/freescale/dpaa/dpaa_eth.c
··· 1648 1648 qm_sg_entry_get_len(&sgt[0]), dma_dir); 1649 1649 1650 1650 /* remaining pages were mapped with skb_frag_dma_map() */ 1651 - for (i = 1; i < nr_frags; i++) { 1651 + for (i = 1; i <= nr_frags; i++) { 1652 1652 WARN_ON(qm_sg_entry_is_ext(&sgt[i])); 1653 1653 1654 1654 dma_unmap_page(dev, qm_sg_addr(&sgt[i]),
+3 -5
drivers/net/ethernet/freescale/ucc_geth_ethtool.c
··· 252 252 return -EINVAL; 253 253 } 254 254 255 + if (netif_running(netdev)) 256 + return -EBUSY; 257 + 255 258 ug_info->bdRingLenRx[queue] = ring->rx_pending; 256 259 ug_info->bdRingLenTx[queue] = ring->tx_pending; 257 - 258 - if (netif_running(netdev)) { 259 - /* FIXME: restart automatically */ 260 - netdev_info(netdev, "Please re-open the interface\n"); 261 - } 262 260 263 261 return ret; 264 262 }
+9 -6
drivers/net/hyperv/netvsc.c
··· 875 875 } else if (ret == -EAGAIN) { 876 876 netif_tx_stop_queue(txq); 877 877 ndev_ctx->eth_stats.stop_queue++; 878 - if (atomic_read(&nvchan->queue_sends) < 1 && 879 - !net_device->tx_disable) { 880 - netif_tx_wake_queue(txq); 881 - ndev_ctx->eth_stats.wake_queue++; 882 - ret = -ENOSPC; 883 - } 884 878 } else { 885 879 netdev_err(ndev, 886 880 "Unable to send packet pages %u len %u, ret %d\n", 887 881 packet->page_buf_cnt, packet->total_data_buflen, 888 882 ret); 883 + } 884 + 885 + if (netif_tx_queue_stopped(txq) && 886 + atomic_read(&nvchan->queue_sends) < 1 && 887 + !net_device->tx_disable) { 888 + netif_tx_wake_queue(txq); 889 + ndev_ctx->eth_stats.wake_queue++; 890 + if (ret == -EAGAIN) 891 + ret = -ENOSPC; 889 892 } 890 893 891 894 return ret;
+7 -4
drivers/net/phy/phy_device.c
··· 2116 2116 struct ethtool_pauseparam *pp) 2117 2117 { 2118 2118 if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Pause_BIT, 2119 - phydev->supported) || 2120 - (!linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, 2121 - phydev->supported) && 2122 - pp->rx_pause != pp->tx_pause)) 2119 + phydev->supported) && pp->rx_pause) 2123 2120 return false; 2121 + 2122 + if (!linkmode_test_bit(ETHTOOL_LINK_MODE_Asym_Pause_BIT, 2123 + phydev->supported) && 2124 + pp->rx_pause != pp->tx_pause) 2125 + return false; 2126 + 2124 2127 return true; 2125 2128 } 2126 2129 EXPORT_SYMBOL(phy_validate_pause);
+8
include/net/arp.h
··· 18 18 return val * hash_rnd[0]; 19 19 } 20 20 21 + #ifdef CONFIG_INET 21 22 static inline struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev, u32 key) 22 23 { 23 24 if (dev->flags & (IFF_LOOPBACK | IFF_POINTOPOINT)) ··· 26 25 27 26 return ___neigh_lookup_noref(&arp_tbl, neigh_key_eq32, arp_hashfn, &key, dev); 28 27 } 28 + #else 29 + static inline 30 + struct neighbour *__ipv4_neigh_lookup_noref(struct net_device *dev, u32 key) 31 + { 32 + return NULL; 33 + } 34 + #endif 29 35 30 36 static inline struct neighbour *__ipv4_neigh_lookup(struct net_device *dev, u32 key) 31 37 {
-1
include/net/ipv6_frag.h
··· 94 94 goto out; 95 95 96 96 head->dev = dev; 97 - skb_get(head); 98 97 spin_unlock(&fq->q.lock); 99 98 100 99 icmpv6_send(head, ICMPV6_TIME_EXCEED, ICMPV6_EXC_FRAGTIME, 0);
+10 -1
net/core/neighbour.c
··· 31 31 #include <linux/times.h> 32 32 #include <net/net_namespace.h> 33 33 #include <net/neighbour.h> 34 + #include <net/arp.h> 34 35 #include <net/dst.h> 35 36 #include <net/sock.h> 36 37 #include <net/netevent.h> ··· 664 663 out_tbl_unlock: 665 664 write_unlock_bh(&tbl->lock); 666 665 out_neigh_release: 666 + if (!exempt_from_gc) 667 + atomic_dec(&tbl->gc_entries); 667 668 neigh_release(n); 668 669 goto out; 669 670 } ··· 2993 2990 if (!tbl) 2994 2991 goto out; 2995 2992 rcu_read_lock_bh(); 2996 - neigh = __neigh_lookup_noref(tbl, addr, dev); 2993 + if (index == NEIGH_ARP_TABLE) { 2994 + u32 key = *((u32 *)addr); 2995 + 2996 + neigh = __ipv4_neigh_lookup_noref(dev, key); 2997 + } else { 2998 + neigh = __neigh_lookup_noref(tbl, addr, dev); 2999 + } 2997 3000 if (!neigh) 2998 3001 neigh = __neigh_create(tbl, addr, dev, false); 2999 3002 err = PTR_ERR(neigh);
+6 -1
net/dsa/dsa.c
··· 344 344 345 345 rc = dsa_slave_register_notifier(); 346 346 if (rc) 347 - return rc; 347 + goto register_notifier_fail; 348 348 349 349 dev_add_pack(&dsa_pack_type); 350 350 ··· 352 352 THIS_MODULE); 353 353 354 354 return 0; 355 + 356 + register_notifier_fail: 357 + destroy_workqueue(dsa_owq); 358 + 359 + return rc; 355 360 } 356 361 module_init(dsa_init_module); 357 362
+1 -2
net/ipv4/ipmr_base.c
··· 335 335 } 336 336 spin_unlock_bh(lock); 337 337 err = 0; 338 - e = 0; 339 - 340 338 out: 341 339 cb->args[1] = e; 342 340 return err; ··· 372 374 err = mr_table_dump(mrt, skb, cb, fill, lock, filter); 373 375 if (err < 0) 374 376 break; 377 + cb->args[1] = 0; 375 378 next_table: 376 379 t++; 377 380 }
+1 -1
net/ipv6/sit.c
··· 1084 1084 if (!tdev && tunnel->parms.link) 1085 1085 tdev = __dev_get_by_index(tunnel->net, tunnel->parms.link); 1086 1086 1087 - if (tdev) { 1087 + if (tdev && !netif_is_l3_master(tdev)) { 1088 1088 int t_hlen = tunnel->hlen + sizeof(struct iphdr); 1089 1089 1090 1090 dev->hard_header_len = tdev->hard_header_len + sizeof(struct iphdr);
+2 -1
net/l2tp/l2tp_core.c
··· 1735 1735 } 1736 1736 rcu_read_unlock_bh(); 1737 1737 1738 - flush_workqueue(l2tp_wq); 1738 + if (l2tp_wq) 1739 + flush_workqueue(l2tp_wq); 1739 1740 rcu_barrier(); 1740 1741 1741 1742 for (hash = 0; hash < L2TP_HASH_SIZE_2; hash++)
+1 -1
net/rds/tcp.c
··· 551 551 tbl = kmemdup(rds_tcp_sysctl_table, 552 552 sizeof(rds_tcp_sysctl_table), GFP_KERNEL); 553 553 if (!tbl) { 554 - pr_warn("could not set allocate syctl table\n"); 554 + pr_warn("could not set allocate sysctl table\n"); 555 555 return -ENOMEM; 556 556 } 557 557 rtn->ctl_table = tbl;
+2
net/sched/cls_cgroup.c
··· 32 32 struct cls_cgroup_head *head = rcu_dereference_bh(tp->root); 33 33 u32 classid = task_get_classid(skb); 34 34 35 + if (unlikely(!head)) 36 + return -1; 35 37 if (!classid) 36 38 return -1; 37 39 if (!tcf_em_tree_match(skb, &head->ematches, NULL))
+3
net/sched/cls_matchall.c
··· 32 32 { 33 33 struct cls_mall_head *head = rcu_dereference_bh(tp->root); 34 34 35 + if (unlikely(!head)) 36 + return -1; 37 + 35 38 if (tc_skip_sw(head->flags)) 36 39 return -1; 37 40
+19
tools/testing/selftests/bpf/verifier/jit.c
··· 86 86 .result = ACCEPT, 87 87 .retval = 2, 88 88 }, 89 + { 90 + "jit: jsgt, jslt", 91 + .insns = { 92 + BPF_LD_IMM64(BPF_REG_1, 0x80000000ULL), 93 + BPF_LD_IMM64(BPF_REG_2, 0x0ULL), 94 + BPF_JMP_REG(BPF_JSGT, BPF_REG_1, BPF_REG_2, 2), 95 + BPF_MOV64_IMM(BPF_REG_0, 1), 96 + BPF_EXIT_INSN(), 97 + 98 + BPF_JMP_REG(BPF_JSLT, BPF_REG_2, BPF_REG_1, 2), 99 + BPF_MOV64_IMM(BPF_REG_0, 1), 100 + BPF_EXIT_INSN(), 101 + 102 + BPF_MOV64_IMM(BPF_REG_0, 2), 103 + BPF_EXIT_INSN(), 104 + }, 105 + .result = ACCEPT, 106 + .retval = 2, 107 + },