diff options
25 files changed, 188 insertions, 47 deletions
diff --git a/Documentation/gpio/gpio-legacy.txt b/Documentation/gpio/gpio-legacy.txt index b34fd94f7089..5eacc147ea87 100644 --- a/Documentation/gpio/gpio-legacy.txt +++ b/Documentation/gpio/gpio-legacy.txt | |||
@@ -459,7 +459,7 @@ pin controller? | |||
459 | 459 | ||
460 | This is done by registering "ranges" of pins, which are essentially | 460 | This is done by registering "ranges" of pins, which are essentially |
461 | cross-reference tables. These are described in | 461 | cross-reference tables. These are described in |
462 | Documentation/pinctrl.txt | 462 | Documentation/driver-api/pinctl.rst |
463 | 463 | ||
464 | While the pin allocation is totally managed by the pinctrl subsystem, | 464 | While the pin allocation is totally managed by the pinctrl subsystem, |
465 | gpio (under gpiolib) is still maintained by gpio drivers. It may happen | 465 | gpio (under gpiolib) is still maintained by gpio drivers. It may happen |
diff --git a/MAINTAINERS b/MAINTAINERS index 7cb7f4c3ad3f..2db0f8cd4002 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -10395,7 +10395,7 @@ L: linux-gpio@vger.kernel.org | |||
10395 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git | 10395 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git |
10396 | S: Maintained | 10396 | S: Maintained |
10397 | F: Documentation/devicetree/bindings/pinctrl/ | 10397 | F: Documentation/devicetree/bindings/pinctrl/ |
10398 | F: Documentation/pinctrl.txt | 10398 | F: Documentation/driver-api/pinctl.rst |
10399 | F: drivers/pinctrl/ | 10399 | F: drivers/pinctrl/ |
10400 | F: include/linux/pinctrl/ | 10400 | F: include/linux/pinctrl/ |
10401 | 10401 | ||
diff --git a/arch/sparc/include/asm/spitfire.h b/arch/sparc/include/asm/spitfire.h index 1d8321c827a8..1b1286d05069 100644 --- a/arch/sparc/include/asm/spitfire.h +++ b/arch/sparc/include/asm/spitfire.h | |||
@@ -47,10 +47,26 @@ | |||
47 | #define SUN4V_CHIP_NIAGARA5 0x05 | 47 | #define SUN4V_CHIP_NIAGARA5 0x05 |
48 | #define SUN4V_CHIP_SPARC_M6 0x06 | 48 | #define SUN4V_CHIP_SPARC_M6 0x06 |
49 | #define SUN4V_CHIP_SPARC_M7 0x07 | 49 | #define SUN4V_CHIP_SPARC_M7 0x07 |
50 | #define SUN4V_CHIP_SPARC_M8 0x08 | ||
50 | #define SUN4V_CHIP_SPARC64X 0x8a | 51 | #define SUN4V_CHIP_SPARC64X 0x8a |
51 | #define SUN4V_CHIP_SPARC_SN 0x8b | 52 | #define SUN4V_CHIP_SPARC_SN 0x8b |
52 | #define SUN4V_CHIP_UNKNOWN 0xff | 53 | #define SUN4V_CHIP_UNKNOWN 0xff |
53 | 54 | ||
55 | /* | ||
56 | * The following CPU_ID_xxx constants are used | ||
57 | * to identify the CPU type in the setup phase | ||
58 | * (see head_64.S) | ||
59 | */ | ||
60 | #define CPU_ID_NIAGARA1 ('1') | ||
61 | #define CPU_ID_NIAGARA2 ('2') | ||
62 | #define CPU_ID_NIAGARA3 ('3') | ||
63 | #define CPU_ID_NIAGARA4 ('4') | ||
64 | #define CPU_ID_NIAGARA5 ('5') | ||
65 | #define CPU_ID_M6 ('6') | ||
66 | #define CPU_ID_M7 ('7') | ||
67 | #define CPU_ID_M8 ('8') | ||
68 | #define CPU_ID_SONOMA1 ('N') | ||
69 | |||
54 | #ifndef __ASSEMBLY__ | 70 | #ifndef __ASSEMBLY__ |
55 | 71 | ||
56 | enum ultra_tlb_layout { | 72 | enum ultra_tlb_layout { |
diff --git a/arch/sparc/kernel/cpu.c b/arch/sparc/kernel/cpu.c index 493e023a468a..ef4f18f7a674 100644 --- a/arch/sparc/kernel/cpu.c +++ b/arch/sparc/kernel/cpu.c | |||
@@ -506,6 +506,12 @@ static void __init sun4v_cpu_probe(void) | |||
506 | sparc_pmu_type = "sparc-m7"; | 506 | sparc_pmu_type = "sparc-m7"; |
507 | break; | 507 | break; |
508 | 508 | ||
509 | case SUN4V_CHIP_SPARC_M8: | ||
510 | sparc_cpu_type = "SPARC-M8"; | ||
511 | sparc_fpu_type = "SPARC-M8 integrated FPU"; | ||
512 | sparc_pmu_type = "sparc-m8"; | ||
513 | break; | ||
514 | |||
509 | case SUN4V_CHIP_SPARC_SN: | 515 | case SUN4V_CHIP_SPARC_SN: |
510 | sparc_cpu_type = "SPARC-SN"; | 516 | sparc_cpu_type = "SPARC-SN"; |
511 | sparc_fpu_type = "SPARC-SN integrated FPU"; | 517 | sparc_fpu_type = "SPARC-SN integrated FPU"; |
diff --git a/arch/sparc/kernel/cpumap.c b/arch/sparc/kernel/cpumap.c index 45c820e1cba5..90d550bbfeef 100644 --- a/arch/sparc/kernel/cpumap.c +++ b/arch/sparc/kernel/cpumap.c | |||
@@ -328,6 +328,7 @@ static int iterate_cpu(struct cpuinfo_tree *t, unsigned int root_index) | |||
328 | case SUN4V_CHIP_NIAGARA5: | 328 | case SUN4V_CHIP_NIAGARA5: |
329 | case SUN4V_CHIP_SPARC_M6: | 329 | case SUN4V_CHIP_SPARC_M6: |
330 | case SUN4V_CHIP_SPARC_M7: | 330 | case SUN4V_CHIP_SPARC_M7: |
331 | case SUN4V_CHIP_SPARC_M8: | ||
331 | case SUN4V_CHIP_SPARC_SN: | 332 | case SUN4V_CHIP_SPARC_SN: |
332 | case SUN4V_CHIP_SPARC64X: | 333 | case SUN4V_CHIP_SPARC64X: |
333 | rover_inc_table = niagara_iterate_method; | 334 | rover_inc_table = niagara_iterate_method; |
diff --git a/arch/sparc/kernel/head_64.S b/arch/sparc/kernel/head_64.S index 41a407328667..78e0211753d2 100644 --- a/arch/sparc/kernel/head_64.S +++ b/arch/sparc/kernel/head_64.S | |||
@@ -424,22 +424,25 @@ EXPORT_SYMBOL(sun4v_chip_type) | |||
424 | nop | 424 | nop |
425 | 425 | ||
426 | 70: ldub [%g1 + 7], %g2 | 426 | 70: ldub [%g1 + 7], %g2 |
427 | cmp %g2, '3' | 427 | cmp %g2, CPU_ID_NIAGARA3 |
428 | be,pt %xcc, 5f | 428 | be,pt %xcc, 5f |
429 | mov SUN4V_CHIP_NIAGARA3, %g4 | 429 | mov SUN4V_CHIP_NIAGARA3, %g4 |
430 | cmp %g2, '4' | 430 | cmp %g2, CPU_ID_NIAGARA4 |
431 | be,pt %xcc, 5f | 431 | be,pt %xcc, 5f |
432 | mov SUN4V_CHIP_NIAGARA4, %g4 | 432 | mov SUN4V_CHIP_NIAGARA4, %g4 |
433 | cmp %g2, '5' | 433 | cmp %g2, CPU_ID_NIAGARA5 |
434 | be,pt %xcc, 5f | 434 | be,pt %xcc, 5f |
435 | mov SUN4V_CHIP_NIAGARA5, %g4 | 435 | mov SUN4V_CHIP_NIAGARA5, %g4 |
436 | cmp %g2, '6' | 436 | cmp %g2, CPU_ID_M6 |
437 | be,pt %xcc, 5f | 437 | be,pt %xcc, 5f |
438 | mov SUN4V_CHIP_SPARC_M6, %g4 | 438 | mov SUN4V_CHIP_SPARC_M6, %g4 |
439 | cmp %g2, '7' | 439 | cmp %g2, CPU_ID_M7 |
440 | be,pt %xcc, 5f | 440 | be,pt %xcc, 5f |
441 | mov SUN4V_CHIP_SPARC_M7, %g4 | 441 | mov SUN4V_CHIP_SPARC_M7, %g4 |
442 | cmp %g2, 'N' | 442 | cmp %g2, CPU_ID_M8 |
443 | be,pt %xcc, 5f | ||
444 | mov SUN4V_CHIP_SPARC_M8, %g4 | ||
445 | cmp %g2, CPU_ID_SONOMA1 | ||
443 | be,pt %xcc, 5f | 446 | be,pt %xcc, 5f |
444 | mov SUN4V_CHIP_SPARC_SN, %g4 | 447 | mov SUN4V_CHIP_SPARC_SN, %g4 |
445 | ba,pt %xcc, 49f | 448 | ba,pt %xcc, 49f |
@@ -448,10 +451,10 @@ EXPORT_SYMBOL(sun4v_chip_type) | |||
448 | 91: sethi %hi(prom_cpu_compatible), %g1 | 451 | 91: sethi %hi(prom_cpu_compatible), %g1 |
449 | or %g1, %lo(prom_cpu_compatible), %g1 | 452 | or %g1, %lo(prom_cpu_compatible), %g1 |
450 | ldub [%g1 + 17], %g2 | 453 | ldub [%g1 + 17], %g2 |
451 | cmp %g2, '1' | 454 | cmp %g2, CPU_ID_NIAGARA1 |
452 | be,pt %xcc, 5f | 455 | be,pt %xcc, 5f |
453 | mov SUN4V_CHIP_NIAGARA1, %g4 | 456 | mov SUN4V_CHIP_NIAGARA1, %g4 |
454 | cmp %g2, '2' | 457 | cmp %g2, CPU_ID_NIAGARA2 |
455 | be,pt %xcc, 5f | 458 | be,pt %xcc, 5f |
456 | mov SUN4V_CHIP_NIAGARA2, %g4 | 459 | mov SUN4V_CHIP_NIAGARA2, %g4 |
457 | 460 | ||
@@ -602,6 +605,9 @@ niagara_tlb_fixup: | |||
602 | cmp %g1, SUN4V_CHIP_SPARC_M7 | 605 | cmp %g1, SUN4V_CHIP_SPARC_M7 |
603 | be,pt %xcc, niagara4_patch | 606 | be,pt %xcc, niagara4_patch |
604 | nop | 607 | nop |
608 | cmp %g1, SUN4V_CHIP_SPARC_M8 | ||
609 | be,pt %xcc, niagara4_patch | ||
610 | nop | ||
605 | cmp %g1, SUN4V_CHIP_SPARC_SN | 611 | cmp %g1, SUN4V_CHIP_SPARC_SN |
606 | be,pt %xcc, niagara4_patch | 612 | be,pt %xcc, niagara4_patch |
607 | nop | 613 | nop |
diff --git a/arch/sparc/kernel/setup_64.c b/arch/sparc/kernel/setup_64.c index 4d9c3e13c150..150ee7d4b059 100644 --- a/arch/sparc/kernel/setup_64.c +++ b/arch/sparc/kernel/setup_64.c | |||
@@ -288,10 +288,17 @@ static void __init sun4v_patch(void) | |||
288 | 288 | ||
289 | sun4v_patch_2insn_range(&__sun4v_2insn_patch, | 289 | sun4v_patch_2insn_range(&__sun4v_2insn_patch, |
290 | &__sun4v_2insn_patch_end); | 290 | &__sun4v_2insn_patch_end); |
291 | if (sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || | 291 | |
292 | sun4v_chip_type == SUN4V_CHIP_SPARC_SN) | 292 | switch (sun4v_chip_type) { |
293 | case SUN4V_CHIP_SPARC_M7: | ||
294 | case SUN4V_CHIP_SPARC_M8: | ||
295 | case SUN4V_CHIP_SPARC_SN: | ||
293 | sun_m7_patch_2insn_range(&__sun_m7_2insn_patch, | 296 | sun_m7_patch_2insn_range(&__sun_m7_2insn_patch, |
294 | &__sun_m7_2insn_patch_end); | 297 | &__sun_m7_2insn_patch_end); |
298 | break; | ||
299 | default: | ||
300 | break; | ||
301 | } | ||
295 | 302 | ||
296 | sun4v_hvapi_init(); | 303 | sun4v_hvapi_init(); |
297 | } | 304 | } |
@@ -529,6 +536,7 @@ static void __init init_sparc64_elf_hwcap(void) | |||
529 | sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || | 536 | sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || |
530 | sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || | 537 | sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || |
531 | sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || | 538 | sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || |
539 | sun4v_chip_type == SUN4V_CHIP_SPARC_M8 || | ||
532 | sun4v_chip_type == SUN4V_CHIP_SPARC_SN || | 540 | sun4v_chip_type == SUN4V_CHIP_SPARC_SN || |
533 | sun4v_chip_type == SUN4V_CHIP_SPARC64X) | 541 | sun4v_chip_type == SUN4V_CHIP_SPARC64X) |
534 | cap |= HWCAP_SPARC_BLKINIT; | 542 | cap |= HWCAP_SPARC_BLKINIT; |
@@ -538,6 +546,7 @@ static void __init init_sparc64_elf_hwcap(void) | |||
538 | sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || | 546 | sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || |
539 | sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || | 547 | sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || |
540 | sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || | 548 | sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || |
549 | sun4v_chip_type == SUN4V_CHIP_SPARC_M8 || | ||
541 | sun4v_chip_type == SUN4V_CHIP_SPARC_SN || | 550 | sun4v_chip_type == SUN4V_CHIP_SPARC_SN || |
542 | sun4v_chip_type == SUN4V_CHIP_SPARC64X) | 551 | sun4v_chip_type == SUN4V_CHIP_SPARC64X) |
543 | cap |= HWCAP_SPARC_N2; | 552 | cap |= HWCAP_SPARC_N2; |
@@ -568,6 +577,7 @@ static void __init init_sparc64_elf_hwcap(void) | |||
568 | sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || | 577 | sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || |
569 | sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || | 578 | sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || |
570 | sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || | 579 | sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || |
580 | sun4v_chip_type == SUN4V_CHIP_SPARC_M8 || | ||
571 | sun4v_chip_type == SUN4V_CHIP_SPARC_SN || | 581 | sun4v_chip_type == SUN4V_CHIP_SPARC_SN || |
572 | sun4v_chip_type == SUN4V_CHIP_SPARC64X) | 582 | sun4v_chip_type == SUN4V_CHIP_SPARC64X) |
573 | cap |= (AV_SPARC_VIS | AV_SPARC_VIS2 | | 583 | cap |= (AV_SPARC_VIS | AV_SPARC_VIS2 | |
@@ -578,6 +588,7 @@ static void __init init_sparc64_elf_hwcap(void) | |||
578 | sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || | 588 | sun4v_chip_type == SUN4V_CHIP_NIAGARA5 || |
579 | sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || | 589 | sun4v_chip_type == SUN4V_CHIP_SPARC_M6 || |
580 | sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || | 590 | sun4v_chip_type == SUN4V_CHIP_SPARC_M7 || |
591 | sun4v_chip_type == SUN4V_CHIP_SPARC_M8 || | ||
581 | sun4v_chip_type == SUN4V_CHIP_SPARC_SN || | 592 | sun4v_chip_type == SUN4V_CHIP_SPARC_SN || |
582 | sun4v_chip_type == SUN4V_CHIP_SPARC64X) | 593 | sun4v_chip_type == SUN4V_CHIP_SPARC64X) |
583 | cap |= (AV_SPARC_VIS3 | AV_SPARC_HPC | | 594 | cap |= (AV_SPARC_VIS3 | AV_SPARC_HPC | |
diff --git a/arch/sparc/mm/init_64.c b/arch/sparc/mm/init_64.c index fed73f14aa49..afa0099f3748 100644 --- a/arch/sparc/mm/init_64.c +++ b/arch/sparc/mm/init_64.c | |||
@@ -1944,12 +1944,22 @@ static void __init setup_page_offset(void) | |||
1944 | break; | 1944 | break; |
1945 | case SUN4V_CHIP_SPARC_M7: | 1945 | case SUN4V_CHIP_SPARC_M7: |
1946 | case SUN4V_CHIP_SPARC_SN: | 1946 | case SUN4V_CHIP_SPARC_SN: |
1947 | default: | ||
1948 | /* M7 and later support 52-bit virtual addresses. */ | 1947 | /* M7 and later support 52-bit virtual addresses. */ |
1949 | sparc64_va_hole_top = 0xfff8000000000000UL; | 1948 | sparc64_va_hole_top = 0xfff8000000000000UL; |
1950 | sparc64_va_hole_bottom = 0x0008000000000000UL; | 1949 | sparc64_va_hole_bottom = 0x0008000000000000UL; |
1951 | max_phys_bits = 49; | 1950 | max_phys_bits = 49; |
1952 | break; | 1951 | break; |
1952 | case SUN4V_CHIP_SPARC_M8: | ||
1953 | default: | ||
1954 | /* M8 and later support 54-bit virtual addresses. | ||
1955 | * However, restricting M8 and above VA bits to 53 | ||
1956 | * as 4-level page table cannot support more than | ||
1957 | * 53 VA bits. | ||
1958 | */ | ||
1959 | sparc64_va_hole_top = 0xfff0000000000000UL; | ||
1960 | sparc64_va_hole_bottom = 0x0010000000000000UL; | ||
1961 | max_phys_bits = 51; | ||
1962 | break; | ||
1953 | } | 1963 | } |
1954 | } | 1964 | } |
1955 | 1965 | ||
@@ -2161,6 +2171,7 @@ static void __init sun4v_linear_pte_xor_finalize(void) | |||
2161 | */ | 2171 | */ |
2162 | switch (sun4v_chip_type) { | 2172 | switch (sun4v_chip_type) { |
2163 | case SUN4V_CHIP_SPARC_M7: | 2173 | case SUN4V_CHIP_SPARC_M7: |
2174 | case SUN4V_CHIP_SPARC_M8: | ||
2164 | case SUN4V_CHIP_SPARC_SN: | 2175 | case SUN4V_CHIP_SPARC_SN: |
2165 | pagecv_flag = 0x00; | 2176 | pagecv_flag = 0x00; |
2166 | break; | 2177 | break; |
@@ -2313,6 +2324,7 @@ void __init paging_init(void) | |||
2313 | */ | 2324 | */ |
2314 | switch (sun4v_chip_type) { | 2325 | switch (sun4v_chip_type) { |
2315 | case SUN4V_CHIP_SPARC_M7: | 2326 | case SUN4V_CHIP_SPARC_M7: |
2327 | case SUN4V_CHIP_SPARC_M8: | ||
2316 | case SUN4V_CHIP_SPARC_SN: | 2328 | case SUN4V_CHIP_SPARC_SN: |
2317 | page_cache4v_flag = _PAGE_CP_4V; | 2329 | page_cache4v_flag = _PAGE_CP_4V; |
2318 | break; | 2330 | break; |
diff --git a/drivers/block/sunvdc.c b/drivers/block/sunvdc.c index 6b16ead1da58..ad9749463d4f 100644 --- a/drivers/block/sunvdc.c +++ b/drivers/block/sunvdc.c | |||
@@ -875,6 +875,56 @@ static void print_version(void) | |||
875 | printk(KERN_INFO "%s", version); | 875 | printk(KERN_INFO "%s", version); |
876 | } | 876 | } |
877 | 877 | ||
878 | struct vdc_check_port_data { | ||
879 | int dev_no; | ||
880 | char *type; | ||
881 | }; | ||
882 | |||
883 | static int vdc_device_probed(struct device *dev, void *arg) | ||
884 | { | ||
885 | struct vio_dev *vdev = to_vio_dev(dev); | ||
886 | struct vdc_check_port_data *port_data; | ||
887 | |||
888 | port_data = (struct vdc_check_port_data *)arg; | ||
889 | |||
890 | if ((vdev->dev_no == port_data->dev_no) && | ||
891 | (!(strcmp((char *)&vdev->type, port_data->type))) && | ||
892 | dev_get_drvdata(dev)) { | ||
893 | /* This device has already been configured | ||
894 | * by vdc_port_probe() | ||
895 | */ | ||
896 | return 1; | ||
897 | } else { | ||
898 | return 0; | ||
899 | } | ||
900 | } | ||
901 | |||
902 | /* Determine whether the VIO device is part of an mpgroup | ||
903 | * by locating all the virtual-device-port nodes associated | ||
904 | * with the parent virtual-device node for the VIO device | ||
905 | * and checking whether any of these nodes are vdc-ports | ||
906 | * which have already been configured. | ||
907 | * | ||
908 | * Returns true if this device is part of an mpgroup and has | ||
909 | * already been probed. | ||
910 | */ | ||
911 | static bool vdc_port_mpgroup_check(struct vio_dev *vdev) | ||
912 | { | ||
913 | struct vdc_check_port_data port_data; | ||
914 | struct device *dev; | ||
915 | |||
916 | port_data.dev_no = vdev->dev_no; | ||
917 | port_data.type = (char *)&vdev->type; | ||
918 | |||
919 | dev = device_find_child(vdev->dev.parent, &port_data, | ||
920 | vdc_device_probed); | ||
921 | |||
922 | if (dev) | ||
923 | return true; | ||
924 | |||
925 | return false; | ||
926 | } | ||
927 | |||
878 | static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) | 928 | static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) |
879 | { | 929 | { |
880 | struct mdesc_handle *hp; | 930 | struct mdesc_handle *hp; |
@@ -893,6 +943,14 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) | |||
893 | goto err_out_release_mdesc; | 943 | goto err_out_release_mdesc; |
894 | } | 944 | } |
895 | 945 | ||
946 | /* Check if this device is part of an mpgroup */ | ||
947 | if (vdc_port_mpgroup_check(vdev)) { | ||
948 | printk(KERN_WARNING | ||
949 | "VIO: Ignoring extra vdisk port %s", | ||
950 | dev_name(&vdev->dev)); | ||
951 | goto err_out_release_mdesc; | ||
952 | } | ||
953 | |||
896 | port = kzalloc(sizeof(*port), GFP_KERNEL); | 954 | port = kzalloc(sizeof(*port), GFP_KERNEL); |
897 | err = -ENOMEM; | 955 | err = -ENOMEM; |
898 | if (!port) { | 956 | if (!port) { |
@@ -943,6 +1001,9 @@ static int vdc_port_probe(struct vio_dev *vdev, const struct vio_device_id *id) | |||
943 | if (err) | 1001 | if (err) |
944 | goto err_out_free_tx_ring; | 1002 | goto err_out_free_tx_ring; |
945 | 1003 | ||
1004 | /* Note that the device driver_data is used to determine | ||
1005 | * whether the port has been probed. | ||
1006 | */ | ||
946 | dev_set_drvdata(&vdev->dev, port); | 1007 | dev_set_drvdata(&vdev->dev, port); |
947 | 1008 | ||
948 | mdesc_release(hp); | 1009 | mdesc_release(hp); |
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c index bf9ca3c79d1a..b3a21418f511 100644 --- a/drivers/net/ethernet/broadcom/bcmsysport.c +++ b/drivers/net/ethernet/broadcom/bcmsysport.c | |||
@@ -457,6 +457,8 @@ static void bcm_sysport_get_stats(struct net_device *dev, | |||
457 | else | 457 | else |
458 | p = (char *)priv; | 458 | p = (char *)priv; |
459 | 459 | ||
460 | if (priv->is_lite && !bcm_sysport_lite_stat_valid(s->type)) | ||
461 | continue; | ||
460 | p += s->stat_offset; | 462 | p += s->stat_offset; |
461 | 463 | ||
462 | if (s->stat_sizeof == sizeof(u64)) | 464 | if (s->stat_sizeof == sizeof(u64)) |
diff --git a/drivers/net/geneve.c b/drivers/net/geneve.c index 745d57ae95d7..8b8565dd2afb 100644 --- a/drivers/net/geneve.c +++ b/drivers/net/geneve.c | |||
@@ -1099,7 +1099,7 @@ static int geneve_validate(struct nlattr *tb[], struct nlattr *data[], | |||
1099 | if (data[IFLA_GENEVE_ID]) { | 1099 | if (data[IFLA_GENEVE_ID]) { |
1100 | __u32 vni = nla_get_u32(data[IFLA_GENEVE_ID]); | 1100 | __u32 vni = nla_get_u32(data[IFLA_GENEVE_ID]); |
1101 | 1101 | ||
1102 | if (vni >= GENEVE_VID_MASK) | 1102 | if (vni >= GENEVE_N_VID) |
1103 | return -ERANGE; | 1103 | return -ERANGE; |
1104 | } | 1104 | } |
1105 | 1105 | ||
diff --git a/drivers/pinctrl/intel/pinctrl-cherryview.c b/drivers/pinctrl/intel/pinctrl-cherryview.c index 20f1b4493994..04e929fd0ffe 100644 --- a/drivers/pinctrl/intel/pinctrl-cherryview.c +++ b/drivers/pinctrl/intel/pinctrl-cherryview.c | |||
@@ -1548,6 +1548,13 @@ static const struct dmi_system_id chv_no_valid_mask[] = { | |||
1548 | }, | 1548 | }, |
1549 | }, | 1549 | }, |
1550 | { | 1550 | { |
1551 | .ident = "HP Chromebook 11 G5 (Setzer)", | ||
1552 | .matches = { | ||
1553 | DMI_MATCH(DMI_SYS_VENDOR, "HP"), | ||
1554 | DMI_MATCH(DMI_PRODUCT_NAME, "Setzer"), | ||
1555 | }, | ||
1556 | }, | ||
1557 | { | ||
1551 | .ident = "Acer Chromebook R11 (Cyan)", | 1558 | .ident = "Acer Chromebook R11 (Cyan)", |
1552 | .matches = { | 1559 | .matches = { |
1553 | DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"), | 1560 | DMI_MATCH(DMI_SYS_VENDOR, "GOOGLE"), |
diff --git a/drivers/pinctrl/intel/pinctrl-merrifield.c b/drivers/pinctrl/intel/pinctrl-merrifield.c index 4d4ef42a39b5..86c4b3fab7b0 100644 --- a/drivers/pinctrl/intel/pinctrl-merrifield.c +++ b/drivers/pinctrl/intel/pinctrl-merrifield.c | |||
@@ -343,9 +343,9 @@ static const struct pinctrl_pin_desc mrfld_pins[] = { | |||
343 | 343 | ||
344 | static const unsigned int mrfld_sdio_pins[] = { 50, 51, 52, 53, 54, 55, 56 }; | 344 | static const unsigned int mrfld_sdio_pins[] = { 50, 51, 52, 53, 54, 55, 56 }; |
345 | static const unsigned int mrfld_spi5_pins[] = { 90, 91, 92, 93, 94, 95, 96 }; | 345 | static const unsigned int mrfld_spi5_pins[] = { 90, 91, 92, 93, 94, 95, 96 }; |
346 | static const unsigned int mrfld_uart0_pins[] = { 124, 125, 126, 127 }; | 346 | static const unsigned int mrfld_uart0_pins[] = { 115, 116, 117, 118 }; |
347 | static const unsigned int mrfld_uart1_pins[] = { 128, 129, 130, 131 }; | 347 | static const unsigned int mrfld_uart1_pins[] = { 119, 120, 121, 122 }; |
348 | static const unsigned int mrfld_uart2_pins[] = { 132, 133, 134, 135 }; | 348 | static const unsigned int mrfld_uart2_pins[] = { 123, 124, 125, 126 }; |
349 | static const unsigned int mrfld_pwm0_pins[] = { 144 }; | 349 | static const unsigned int mrfld_pwm0_pins[] = { 144 }; |
350 | static const unsigned int mrfld_pwm1_pins[] = { 145 }; | 350 | static const unsigned int mrfld_pwm1_pins[] = { 145 }; |
351 | static const unsigned int mrfld_pwm2_pins[] = { 132 }; | 351 | static const unsigned int mrfld_pwm2_pins[] = { 132 }; |
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c index f024e25787fc..0c6d7812d6fd 100644 --- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c +++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | |||
@@ -37,7 +37,7 @@ | |||
37 | #define IRQ_STATUS 0x10 | 37 | #define IRQ_STATUS 0x10 |
38 | #define IRQ_WKUP 0x18 | 38 | #define IRQ_WKUP 0x18 |
39 | 39 | ||
40 | #define NB_FUNCS 2 | 40 | #define NB_FUNCS 3 |
41 | #define GPIO_PER_REG 32 | 41 | #define GPIO_PER_REG 32 |
42 | 42 | ||
43 | /** | 43 | /** |
@@ -126,6 +126,16 @@ struct armada_37xx_pinctrl { | |||
126 | .funcs = {_func1, "gpio"} \ | 126 | .funcs = {_func1, "gpio"} \ |
127 | } | 127 | } |
128 | 128 | ||
129 | #define PIN_GRP_GPIO_3(_name, _start, _nr, _mask, _v1, _v2, _v3, _f1, _f2) \ | ||
130 | { \ | ||
131 | .name = _name, \ | ||
132 | .start_pin = _start, \ | ||
133 | .npins = _nr, \ | ||
134 | .reg_mask = _mask, \ | ||
135 | .val = {_v1, _v2, _v3}, \ | ||
136 | .funcs = {_f1, _f2, "gpio"} \ | ||
137 | } | ||
138 | |||
129 | #define PIN_GRP_EXTRA(_name, _start, _nr, _mask, _v1, _v2, _start2, _nr2, \ | 139 | #define PIN_GRP_EXTRA(_name, _start, _nr, _mask, _v1, _v2, _start2, _nr2, \ |
130 | _f1, _f2) \ | 140 | _f1, _f2) \ |
131 | { \ | 141 | { \ |
@@ -171,12 +181,13 @@ static struct armada_37xx_pin_group armada_37xx_sb_groups[] = { | |||
171 | PIN_GRP_GPIO("usb32_drvvbus0", 0, 1, BIT(0), "drvbus"), | 181 | PIN_GRP_GPIO("usb32_drvvbus0", 0, 1, BIT(0), "drvbus"), |
172 | PIN_GRP_GPIO("usb2_drvvbus1", 1, 1, BIT(1), "drvbus"), | 182 | PIN_GRP_GPIO("usb2_drvvbus1", 1, 1, BIT(1), "drvbus"), |
173 | PIN_GRP_GPIO("sdio_sb", 24, 6, BIT(2), "sdio"), | 183 | PIN_GRP_GPIO("sdio_sb", 24, 6, BIT(2), "sdio"), |
174 | PIN_GRP_EXTRA("rgmii", 6, 12, BIT(3), 0, BIT(3), 23, 1, "mii", "gpio"), | 184 | PIN_GRP_GPIO("rgmii", 6, 12, BIT(3), "mii"), |
175 | PIN_GRP_GPIO("pcie1", 3, 2, BIT(4), "pcie"), | 185 | PIN_GRP_GPIO("pcie1", 3, 2, BIT(4), "pcie"), |
176 | PIN_GRP_GPIO("ptp", 20, 3, BIT(5), "ptp"), | 186 | PIN_GRP_GPIO("ptp", 20, 3, BIT(5), "ptp"), |
177 | PIN_GRP("ptp_clk", 21, 1, BIT(6), "ptp", "mii"), | 187 | PIN_GRP("ptp_clk", 21, 1, BIT(6), "ptp", "mii"), |
178 | PIN_GRP("ptp_trig", 22, 1, BIT(7), "ptp", "mii"), | 188 | PIN_GRP("ptp_trig", 22, 1, BIT(7), "ptp", "mii"), |
179 | PIN_GRP("mii_col", 23, 1, BIT(8), "mii", "mii_err"), | 189 | PIN_GRP_GPIO_3("mii_col", 23, 1, BIT(8) | BIT(14), 0, BIT(8), BIT(14), |
190 | "mii", "mii_err"), | ||
180 | }; | 191 | }; |
181 | 192 | ||
182 | const struct armada_37xx_pin_data armada_37xx_pin_nb = { | 193 | const struct armada_37xx_pin_data armada_37xx_pin_nb = { |
@@ -187,7 +198,7 @@ const struct armada_37xx_pin_data armada_37xx_pin_nb = { | |||
187 | }; | 198 | }; |
188 | 199 | ||
189 | const struct armada_37xx_pin_data armada_37xx_pin_sb = { | 200 | const struct armada_37xx_pin_data armada_37xx_pin_sb = { |
190 | .nr_pins = 29, | 201 | .nr_pins = 30, |
191 | .name = "GPIO2", | 202 | .name = "GPIO2", |
192 | .groups = armada_37xx_sb_groups, | 203 | .groups = armada_37xx_sb_groups, |
193 | .ngroups = ARRAY_SIZE(armada_37xx_sb_groups), | 204 | .ngroups = ARRAY_SIZE(armada_37xx_sb_groups), |
@@ -208,7 +219,7 @@ static int armada_37xx_get_func_reg(struct armada_37xx_pin_group *grp, | |||
208 | { | 219 | { |
209 | int f; | 220 | int f; |
210 | 221 | ||
211 | for (f = 0; f < NB_FUNCS; f++) | 222 | for (f = 0; (f < NB_FUNCS) && grp->funcs[f]; f++) |
212 | if (!strcmp(grp->funcs[f], func)) | 223 | if (!strcmp(grp->funcs[f], func)) |
213 | return f; | 224 | return f; |
214 | 225 | ||
@@ -795,7 +806,7 @@ static int armada_37xx_fill_group(struct armada_37xx_pinctrl *info) | |||
795 | for (j = 0; j < grp->extra_npins; j++) | 806 | for (j = 0; j < grp->extra_npins; j++) |
796 | grp->pins[i+j] = grp->extra_pin + j; | 807 | grp->pins[i+j] = grp->extra_pin + j; |
797 | 808 | ||
798 | for (f = 0; f < NB_FUNCS; f++) { | 809 | for (f = 0; (f < NB_FUNCS) && grp->funcs[f]; f++) { |
799 | int ret; | 810 | int ret; |
800 | /* check for unique functions and count groups */ | 811 | /* check for unique functions and count groups */ |
801 | ret = armada_37xx_add_function(info->funcs, &funcsize, | 812 | ret = armada_37xx_add_function(info->funcs, &funcsize, |
@@ -847,7 +858,7 @@ static int armada_37xx_fill_func(struct armada_37xx_pinctrl *info) | |||
847 | struct armada_37xx_pin_group *gp = &info->groups[g]; | 858 | struct armada_37xx_pin_group *gp = &info->groups[g]; |
848 | int f; | 859 | int f; |
849 | 860 | ||
850 | for (f = 0; f < NB_FUNCS; f++) { | 861 | for (f = 0; (f < NB_FUNCS) && gp->funcs[f]; f++) { |
851 | if (strcmp(gp->funcs[f], name) == 0) { | 862 | if (strcmp(gp->funcs[f], name) == 0) { |
852 | *groups = gp->name; | 863 | *groups = gp->name; |
853 | groups++; | 864 | groups++; |
diff --git a/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c b/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c index 159580c04b14..47a392bc73c8 100644 --- a/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c +++ b/drivers/pinctrl/sunxi/pinctrl-sun4i-a10.c | |||
@@ -918,6 +918,7 @@ static const struct sunxi_desc_pin sun4i_a10_pins[] = { | |||
918 | SUNXI_FUNCTION_VARIANT(0x3, "emac", /* ETXD1 */ | 918 | SUNXI_FUNCTION_VARIANT(0x3, "emac", /* ETXD1 */ |
919 | PINCTRL_SUN7I_A20), | 919 | PINCTRL_SUN7I_A20), |
920 | SUNXI_FUNCTION(0x4, "keypad"), /* IN6 */ | 920 | SUNXI_FUNCTION(0x4, "keypad"), /* IN6 */ |
921 | SUNXI_FUNCTION(0x5, "sim"), /* DET */ | ||
921 | SUNXI_FUNCTION_IRQ(0x6, 16), /* EINT16 */ | 922 | SUNXI_FUNCTION_IRQ(0x6, 16), /* EINT16 */ |
922 | SUNXI_FUNCTION(0x7, "csi1")), /* D16 */ | 923 | SUNXI_FUNCTION(0x7, "csi1")), /* D16 */ |
923 | SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 17), | 924 | SUNXI_PIN(SUNXI_PINCTRL_PIN(H, 17), |
diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c b/drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c index a433a306a2d0..c75e094b2d90 100644 --- a/drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c +++ b/drivers/pinctrl/uniphier/pinctrl-uniphier-pro4.c | |||
@@ -1084,7 +1084,7 @@ static const unsigned usb1_pins[] = {182, 183}; | |||
1084 | static const int usb1_muxvals[] = {0, 0}; | 1084 | static const int usb1_muxvals[] = {0, 0}; |
1085 | static const unsigned usb2_pins[] = {184, 185}; | 1085 | static const unsigned usb2_pins[] = {184, 185}; |
1086 | static const int usb2_muxvals[] = {0, 0}; | 1086 | static const int usb2_muxvals[] = {0, 0}; |
1087 | static const unsigned usb3_pins[] = {186, 187}; | 1087 | static const unsigned usb3_pins[] = {187, 188}; |
1088 | static const int usb3_muxvals[] = {0, 0}; | 1088 | static const int usb3_muxvals[] = {0, 0}; |
1089 | static const unsigned port_range0_pins[] = { | 1089 | static const unsigned port_range0_pins[] = { |
1090 | 300, 301, 302, 303, 304, 305, 306, 307, /* PORT0x */ | 1090 | 300, 301, 302, 303, 304, 305, 306, 307, /* PORT0x */ |
diff --git a/drivers/pinctrl/zte/pinctrl-zx.c b/drivers/pinctrl/zte/pinctrl-zx.c index 787e3967bd5c..f828ee340a98 100644 --- a/drivers/pinctrl/zte/pinctrl-zx.c +++ b/drivers/pinctrl/zte/pinctrl-zx.c | |||
@@ -64,10 +64,8 @@ static int zx_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector, | |||
64 | struct zx_pinctrl_soc_info *info = zpctl->info; | 64 | struct zx_pinctrl_soc_info *info = zpctl->info; |
65 | const struct pinctrl_pin_desc *pindesc = info->pins + group_selector; | 65 | const struct pinctrl_pin_desc *pindesc = info->pins + group_selector; |
66 | struct zx_pin_data *data = pindesc->drv_data; | 66 | struct zx_pin_data *data = pindesc->drv_data; |
67 | struct zx_mux_desc *mux = data->muxes; | 67 | struct zx_mux_desc *mux; |
68 | u32 mask = (1 << data->width) - 1; | 68 | u32 mask, offset, bitpos; |
69 | u32 offset = data->offset; | ||
70 | u32 bitpos = data->bitpos; | ||
71 | struct function_desc *func; | 69 | struct function_desc *func; |
72 | unsigned long flags; | 70 | unsigned long flags; |
73 | u32 val, mval; | 71 | u32 val, mval; |
@@ -76,6 +74,11 @@ static int zx_set_mux(struct pinctrl_dev *pctldev, unsigned int func_selector, | |||
76 | if (!data) | 74 | if (!data) |
77 | return -EINVAL; | 75 | return -EINVAL; |
78 | 76 | ||
77 | mux = data->muxes; | ||
78 | mask = (1 << data->width) - 1; | ||
79 | offset = data->offset; | ||
80 | bitpos = data->bitpos; | ||
81 | |||
79 | func = pinmux_generic_get_function(pctldev, func_selector); | 82 | func = pinmux_generic_get_function(pctldev, func_selector); |
80 | if (!func) | 83 | if (!func) |
81 | return -EINVAL; | 84 | return -EINVAL; |
diff --git a/include/linux/device.h b/include/linux/device.h index 723cd54b94da..beabdbc08420 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
@@ -843,7 +843,7 @@ struct dev_links_info { | |||
843 | * hibernation, system resume and during runtime PM transitions | 843 | * hibernation, system resume and during runtime PM transitions |
844 | * along with subsystem-level and driver-level callbacks. | 844 | * along with subsystem-level and driver-level callbacks. |
845 | * @pins: For device pin management. | 845 | * @pins: For device pin management. |
846 | * See Documentation/pinctrl.txt for details. | 846 | * See Documentation/driver-api/pinctl.rst for details. |
847 | * @msi_list: Hosts MSI descriptors | 847 | * @msi_list: Hosts MSI descriptors |
848 | * @msi_domain: The generic MSI domain this device is using. | 848 | * @msi_domain: The generic MSI domain this device is using. |
849 | * @numa_node: NUMA node this device is close to. | 849 | * @numa_node: NUMA node this device is close to. |
diff --git a/include/linux/pinctrl/pinconf-generic.h b/include/linux/pinctrl/pinconf-generic.h index 231d3075815a..e91d1b6a260d 100644 --- a/include/linux/pinctrl/pinconf-generic.h +++ b/include/linux/pinctrl/pinconf-generic.h | |||
@@ -81,8 +81,8 @@ | |||
81 | * it. | 81 | * it. |
82 | * @PIN_CONFIG_OUTPUT: this will configure the pin as an output and drive a | 82 | * @PIN_CONFIG_OUTPUT: this will configure the pin as an output and drive a |
83 | * value on the line. Use argument 1 to indicate high level, argument 0 to | 83 | * value on the line. Use argument 1 to indicate high level, argument 0 to |
84 | * indicate low level. (Please see Documentation/pinctrl.txt, section | 84 | * indicate low level. (Please see Documentation/driver-api/pinctl.rst, |
85 | * "GPIO mode pitfalls" for a discussion around this parameter.) | 85 | * section "GPIO mode pitfalls" for a discussion around this parameter.) |
86 | * @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power | 86 | * @PIN_CONFIG_POWER_SOURCE: if the pin can select between different power |
87 | * supplies, the argument to this parameter (on a custom format) tells | 87 | * supplies, the argument to this parameter (on a custom format) tells |
88 | * the driver which alternative power source to use. | 88 | * the driver which alternative power source to use. |
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 683ffafb6ff9..d678820e4306 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c | |||
@@ -1725,6 +1725,13 @@ static __net_init int inet_init_net(struct net *net) | |||
1725 | net->ipv4.sysctl_ip_prot_sock = PROT_SOCK; | 1725 | net->ipv4.sysctl_ip_prot_sock = PROT_SOCK; |
1726 | #endif | 1726 | #endif |
1727 | 1727 | ||
1728 | /* Some igmp sysctl, whose values are always used */ | ||
1729 | net->ipv4.sysctl_igmp_max_memberships = 20; | ||
1730 | net->ipv4.sysctl_igmp_max_msf = 10; | ||
1731 | /* IGMP reports for link-local multicast groups are enabled by default */ | ||
1732 | net->ipv4.sysctl_igmp_llm_reports = 1; | ||
1733 | net->ipv4.sysctl_igmp_qrv = 2; | ||
1734 | |||
1728 | return 0; | 1735 | return 0; |
1729 | } | 1736 | } |
1730 | 1737 | ||
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index 5bc8570c2ec3..9f86b5133605 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c | |||
@@ -2976,12 +2976,6 @@ static int __net_init igmp_net_init(struct net *net) | |||
2976 | goto out_sock; | 2976 | goto out_sock; |
2977 | } | 2977 | } |
2978 | 2978 | ||
2979 | /* Sysctl initialization */ | ||
2980 | net->ipv4.sysctl_igmp_max_memberships = 20; | ||
2981 | net->ipv4.sysctl_igmp_max_msf = 10; | ||
2982 | /* IGMP reports for link-local multicast groups are enabled by default */ | ||
2983 | net->ipv4.sysctl_igmp_llm_reports = 1; | ||
2984 | net->ipv4.sysctl_igmp_qrv = 2; | ||
2985 | return 0; | 2979 | return 0; |
2986 | 2980 | ||
2987 | out_sock: | 2981 | out_sock: |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index cac59d7420cd..cb633884e825 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -809,7 +809,7 @@ static int udp_send_skb(struct sk_buff *skb, struct flowi4 *fl4) | |||
809 | if (is_udplite) /* UDP-Lite */ | 809 | if (is_udplite) /* UDP-Lite */ |
810 | csum = udplite_csum(skb); | 810 | csum = udplite_csum(skb); |
811 | 811 | ||
812 | else if (sk->sk_no_check_tx) { /* UDP csum disabled */ | 812 | else if (sk->sk_no_check_tx && !skb_is_gso(skb)) { /* UDP csum off */ |
813 | 813 | ||
814 | skb->ip_summed = CHECKSUM_NONE; | 814 | skb->ip_summed = CHECKSUM_NONE; |
815 | goto send; | 815 | goto send; |
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 5a178047a7ce..f31cb71172e0 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c | |||
@@ -3698,14 +3698,19 @@ packet_setsockopt(struct socket *sock, int level, int optname, char __user *optv | |||
3698 | 3698 | ||
3699 | if (optlen != sizeof(val)) | 3699 | if (optlen != sizeof(val)) |
3700 | return -EINVAL; | 3700 | return -EINVAL; |
3701 | if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) | ||
3702 | return -EBUSY; | ||
3703 | if (copy_from_user(&val, optval, sizeof(val))) | 3701 | if (copy_from_user(&val, optval, sizeof(val))) |
3704 | return -EFAULT; | 3702 | return -EFAULT; |
3705 | if (val > INT_MAX) | 3703 | if (val > INT_MAX) |
3706 | return -EINVAL; | 3704 | return -EINVAL; |
3707 | po->tp_reserve = val; | 3705 | lock_sock(sk); |
3708 | return 0; | 3706 | if (po->rx_ring.pg_vec || po->tx_ring.pg_vec) { |
3707 | ret = -EBUSY; | ||
3708 | } else { | ||
3709 | po->tp_reserve = val; | ||
3710 | ret = 0; | ||
3711 | } | ||
3712 | release_sock(sk); | ||
3713 | return ret; | ||
3709 | } | 3714 | } |
3710 | case PACKET_LOSS: | 3715 | case PACKET_LOSS: |
3711 | { | 3716 | { |
diff --git a/net/sched/act_ipt.c b/net/sched/act_ipt.c index 94ba5cfab860..d516ba8178b8 100644 --- a/net/sched/act_ipt.c +++ b/net/sched/act_ipt.c | |||
@@ -49,9 +49,9 @@ static int ipt_init_target(struct net *net, struct xt_entry_target *t, | |||
49 | return PTR_ERR(target); | 49 | return PTR_ERR(target); |
50 | 50 | ||
51 | t->u.kernel.target = target; | 51 | t->u.kernel.target = target; |
52 | memset(&par, 0, sizeof(par)); | ||
52 | par.net = net; | 53 | par.net = net; |
53 | par.table = table; | 54 | par.table = table; |
54 | par.entryinfo = NULL; | ||
55 | par.target = target; | 55 | par.target = target; |
56 | par.targinfo = t->data; | 56 | par.targinfo = t->data; |
57 | par.hook_mask = hook; | 57 | par.hook_mask = hook; |
diff --git a/net/tipc/node.c b/net/tipc/node.c index aeef8011ac7d..9b4dcb6a16b5 100644 --- a/net/tipc/node.c +++ b/net/tipc/node.c | |||
@@ -1455,10 +1455,8 @@ static bool tipc_node_check_state(struct tipc_node *n, struct sk_buff *skb, | |||
1455 | /* Initiate synch mode if applicable */ | 1455 | /* Initiate synch mode if applicable */ |
1456 | if ((usr == TUNNEL_PROTOCOL) && (mtyp == SYNCH_MSG) && (oseqno == 1)) { | 1456 | if ((usr == TUNNEL_PROTOCOL) && (mtyp == SYNCH_MSG) && (oseqno == 1)) { |
1457 | syncpt = iseqno + exp_pkts - 1; | 1457 | syncpt = iseqno + exp_pkts - 1; |
1458 | if (!tipc_link_is_up(l)) { | 1458 | if (!tipc_link_is_up(l)) |
1459 | tipc_link_fsm_evt(l, LINK_ESTABLISH_EVT); | ||
1460 | __tipc_node_link_up(n, bearer_id, xmitq); | 1459 | __tipc_node_link_up(n, bearer_id, xmitq); |
1461 | } | ||
1462 | if (n->state == SELF_UP_PEER_UP) { | 1460 | if (n->state == SELF_UP_PEER_UP) { |
1463 | n->sync_point = syncpt; | 1461 | n->sync_point = syncpt; |
1464 | tipc_link_fsm_evt(l, LINK_SYNCH_BEGIN_EVT); | 1462 | tipc_link_fsm_evt(l, LINK_SYNCH_BEGIN_EVT); |