diff options
218 files changed, 949 insertions, 622 deletions
diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c index dc73bc54cc4..d9da7e14853 100644 --- a/Documentation/lguest/lguest.c +++ b/Documentation/lguest/lguest.c | |||
| @@ -39,6 +39,9 @@ | |||
| 39 | #include <limits.h> | 39 | #include <limits.h> |
| 40 | #include <stddef.h> | 40 | #include <stddef.h> |
| 41 | #include <signal.h> | 41 | #include <signal.h> |
| 42 | #include <pwd.h> | ||
| 43 | #include <grp.h> | ||
| 44 | |||
| 42 | #include <linux/virtio_config.h> | 45 | #include <linux/virtio_config.h> |
| 43 | #include <linux/virtio_net.h> | 46 | #include <linux/virtio_net.h> |
| 44 | #include <linux/virtio_blk.h> | 47 | #include <linux/virtio_blk.h> |
| @@ -298,20 +301,27 @@ static void *map_zeroed_pages(unsigned int num) | |||
| 298 | 301 | ||
| 299 | /* | 302 | /* |
| 300 | * We use a private mapping (ie. if we write to the page, it will be | 303 | * We use a private mapping (ie. if we write to the page, it will be |
| 301 | * copied). | 304 | * copied). We allocate an extra two pages PROT_NONE to act as guard |
| 305 | * pages against read/write attempts that exceed allocated space. | ||
| 302 | */ | 306 | */ |
| 303 | addr = mmap(NULL, getpagesize() * num, | 307 | addr = mmap(NULL, getpagesize() * (num+2), |
| 304 | PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, fd, 0); | 308 | PROT_NONE, MAP_PRIVATE, fd, 0); |
| 309 | |||
| 305 | if (addr == MAP_FAILED) | 310 | if (addr == MAP_FAILED) |
| 306 | err(1, "Mmapping %u pages of /dev/zero", num); | 311 | err(1, "Mmapping %u pages of /dev/zero", num); |
| 307 | 312 | ||
| 313 | if (mprotect(addr + getpagesize(), getpagesize() * num, | ||
| 314 | PROT_READ|PROT_WRITE) == -1) | ||
| 315 | err(1, "mprotect rw %u pages failed", num); | ||
| 316 | |||
| 308 | /* | 317 | /* |
| 309 | * One neat mmap feature is that you can close the fd, and it | 318 | * One neat mmap feature is that you can close the fd, and it |
| 310 | * stays mapped. | 319 | * stays mapped. |
| 311 | */ | 320 | */ |
| 312 | close(fd); | 321 | close(fd); |
| 313 | 322 | ||
| 314 | return addr; | 323 | /* Return address after PROT_NONE page */ |
| 324 | return addr + getpagesize(); | ||
| 315 | } | 325 | } |
| 316 | 326 | ||
| 317 | /* Get some more pages for a device. */ | 327 | /* Get some more pages for a device. */ |
| @@ -343,7 +353,7 @@ static void map_at(int fd, void *addr, unsigned long offset, unsigned long len) | |||
| 343 | * done to it. This allows us to share untouched memory between | 353 | * done to it. This allows us to share untouched memory between |
| 344 | * Guests. | 354 | * Guests. |
| 345 | */ | 355 | */ |
| 346 | if (mmap(addr, len, PROT_READ|PROT_WRITE|PROT_EXEC, | 356 | if (mmap(addr, len, PROT_READ|PROT_WRITE, |
| 347 | MAP_FIXED|MAP_PRIVATE, fd, offset) != MAP_FAILED) | 357 | MAP_FIXED|MAP_PRIVATE, fd, offset) != MAP_FAILED) |
| 348 | return; | 358 | return; |
| 349 | 359 | ||
| @@ -573,10 +583,10 @@ static void *_check_pointer(unsigned long addr, unsigned int size, | |||
| 573 | unsigned int line) | 583 | unsigned int line) |
| 574 | { | 584 | { |
| 575 | /* | 585 | /* |
| 576 | * We have to separately check addr and addr+size, because size could | 586 | * Check if the requested address and size exceeds the allocated memory, |
| 577 | * be huge and addr + size might wrap around. | 587 | * or addr + size wraps around. |
| 578 | */ | 588 | */ |
| 579 | if (addr >= guest_limit || addr + size >= guest_limit) | 589 | if ((addr + size) > guest_limit || (addr + size) < addr) |
| 580 | errx(1, "%s:%i: Invalid address %#lx", __FILE__, line, addr); | 590 | errx(1, "%s:%i: Invalid address %#lx", __FILE__, line, addr); |
| 581 | /* | 591 | /* |
| 582 | * We return a pointer for the caller's convenience, now we know it's | 592 | * We return a pointer for the caller's convenience, now we know it's |
| @@ -1872,6 +1882,8 @@ static struct option opts[] = { | |||
| 1872 | { "block", 1, NULL, 'b' }, | 1882 | { "block", 1, NULL, 'b' }, |
| 1873 | { "rng", 0, NULL, 'r' }, | 1883 | { "rng", 0, NULL, 'r' }, |
| 1874 | { "initrd", 1, NULL, 'i' }, | 1884 | { "initrd", 1, NULL, 'i' }, |
| 1885 | { "username", 1, NULL, 'u' }, | ||
| 1886 | { "chroot", 1, NULL, 'c' }, | ||
| 1875 | { NULL }, | 1887 | { NULL }, |
| 1876 | }; | 1888 | }; |
| 1877 | static void usage(void) | 1889 | static void usage(void) |
| @@ -1894,6 +1906,12 @@ int main(int argc, char *argv[]) | |||
| 1894 | /* If they specify an initrd file to load. */ | 1906 | /* If they specify an initrd file to load. */ |
| 1895 | const char *initrd_name = NULL; | 1907 | const char *initrd_name = NULL; |
| 1896 | 1908 | ||
| 1909 | /* Password structure for initgroups/setres[gu]id */ | ||
| 1910 | struct passwd *user_details = NULL; | ||
| 1911 | |||
| 1912 | /* Directory to chroot to */ | ||
| 1913 | char *chroot_path = NULL; | ||
| 1914 | |||
| 1897 | /* Save the args: we "reboot" by execing ourselves again. */ | 1915 | /* Save the args: we "reboot" by execing ourselves again. */ |
| 1898 | main_args = argv; | 1916 | main_args = argv; |
| 1899 | 1917 | ||
| @@ -1950,6 +1968,14 @@ int main(int argc, char *argv[]) | |||
| 1950 | case 'i': | 1968 | case 'i': |
| 1951 | initrd_name = optarg; | 1969 | initrd_name = optarg; |
| 1952 | break; | 1970 | break; |
| 1971 | case 'u': | ||
| 1972 | user_details = getpwnam(optarg); | ||
| 1973 | if (!user_details) | ||
| 1974 | err(1, "getpwnam failed, incorrect username?"); | ||
| 1975 | break; | ||
| 1976 | case 'c': | ||
| 1977 | chroot_path = optarg; | ||
| 1978 | break; | ||
| 1953 | default: | 1979 | default: |
| 1954 | warnx("Unknown argument %s", argv[optind]); | 1980 | warnx("Unknown argument %s", argv[optind]); |
| 1955 | usage(); | 1981 | usage(); |
| @@ -2021,6 +2047,37 @@ int main(int argc, char *argv[]) | |||
| 2021 | /* If we exit via err(), this kills all the threads, restores tty. */ | 2047 | /* If we exit via err(), this kills all the threads, restores tty. */ |
| 2022 | atexit(cleanup_devices); | 2048 | atexit(cleanup_devices); |
| 2023 | 2049 | ||
| 2050 | /* If requested, chroot to a directory */ | ||
| 2051 | if (chroot_path) { | ||
| 2052 | if (chroot(chroot_path) != 0) | ||
| 2053 | err(1, "chroot(\"%s\") failed", chroot_path); | ||
| 2054 | |||
| 2055 | if (chdir("/") != 0) | ||
| 2056 | err(1, "chdir(\"/\") failed"); | ||
| 2057 | |||
| 2058 | verbose("chroot done\n"); | ||
| 2059 | } | ||
| 2060 | |||
| 2061 | /* If requested, drop privileges */ | ||
| 2062 | if (user_details) { | ||
| 2063 | uid_t u; | ||
| 2064 | gid_t g; | ||
| 2065 | |||
| 2066 | u = user_details->pw_uid; | ||
| 2067 | g = user_details->pw_gid; | ||
| 2068 | |||
| 2069 | if (initgroups(user_details->pw_name, g) != 0) | ||
| 2070 | err(1, "initgroups failed"); | ||
| 2071 | |||
| 2072 | if (setresgid(g, g, g) != 0) | ||
| 2073 | err(1, "setresgid failed"); | ||
| 2074 | |||
| 2075 | if (setresuid(u, u, u) != 0) | ||
| 2076 | err(1, "setresuid failed"); | ||
| 2077 | |||
| 2078 | verbose("Dropping privileges completed\n"); | ||
| 2079 | } | ||
| 2080 | |||
| 2024 | /* Finally, run the Guest. This doesn't return. */ | 2081 | /* Finally, run the Guest. This doesn't return. */ |
| 2025 | run_guest(); | 2082 | run_guest(); |
| 2026 | } | 2083 | } |
diff --git a/Documentation/lguest/lguest.txt b/Documentation/lguest/lguest.txt index 6ccaf8e1a00..dad99978a6a 100644 --- a/Documentation/lguest/lguest.txt +++ b/Documentation/lguest/lguest.txt | |||
| @@ -117,6 +117,11 @@ Running Lguest: | |||
| 117 | 117 | ||
| 118 | for general information on how to get bridging to work. | 118 | for general information on how to get bridging to work. |
| 119 | 119 | ||
| 120 | - Random number generation. Using the --rng option will provide a | ||
| 121 | /dev/hwrng in the guest that will read from the host's /dev/random. | ||
| 122 | Use this option in conjunction with rng-tools (see ../hw_random.txt) | ||
| 123 | to provide entropy to the guest kernel's /dev/random. | ||
| 124 | |||
| 120 | There is a helpful mailing list at http://ozlabs.org/mailman/listinfo/lguest | 125 | There is a helpful mailing list at http://ozlabs.org/mailman/listinfo/lguest |
| 121 | 126 | ||
| 122 | Good luck! | 127 | Good luck! |
diff --git a/arch/arm/mach-msm/board-qsd8x50.c b/arch/arm/mach-msm/board-qsd8x50.c index 2e8391307f5..6dde8185205 100644 --- a/arch/arm/mach-msm/board-qsd8x50.c +++ b/arch/arm/mach-msm/board-qsd8x50.c | |||
| @@ -43,7 +43,7 @@ static const unsigned qsd8x50_surf_smc91x_gpio __initdata = 156; | |||
| 43 | * at run-time: they vary from board to board, and the true | 43 | * at run-time: they vary from board to board, and the true |
| 44 | * configuration won't be known until boot. | 44 | * configuration won't be known until boot. |
| 45 | */ | 45 | */ |
| 46 | static struct resource smc91x_resources[] __initdata = { | 46 | static struct resource smc91x_resources[] = { |
| 47 | [0] = { | 47 | [0] = { |
| 48 | .flags = IORESOURCE_MEM, | 48 | .flags = IORESOURCE_MEM, |
| 49 | }, | 49 | }, |
| @@ -52,7 +52,7 @@ static struct resource smc91x_resources[] __initdata = { | |||
| 52 | }, | 52 | }, |
| 53 | }; | 53 | }; |
| 54 | 54 | ||
| 55 | static struct platform_device smc91x_device __initdata = { | 55 | static struct platform_device smc91x_device = { |
| 56 | .name = "smc91x", | 56 | .name = "smc91x", |
| 57 | .id = 0, | 57 | .id = 0, |
| 58 | .num_resources = ARRAY_SIZE(smc91x_resources), | 58 | .num_resources = ARRAY_SIZE(smc91x_resources), |
diff --git a/arch/x86/include/asm/numa_32.h b/arch/x86/include/asm/numa_32.h index a37229011b5..b0ef2b449a9 100644 --- a/arch/x86/include/asm/numa_32.h +++ b/arch/x86/include/asm/numa_32.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef _ASM_X86_NUMA_32_H | 1 | #ifndef _ASM_X86_NUMA_32_H |
| 2 | #define _ASM_X86_NUMA_32_H | 2 | #define _ASM_X86_NUMA_32_H |
| 3 | 3 | ||
| 4 | extern int numa_off; | ||
| 5 | |||
| 4 | extern int pxm_to_nid(int pxm); | 6 | extern int pxm_to_nid(int pxm); |
| 5 | extern void numa_remove_cpu(int cpu); | 7 | extern void numa_remove_cpu(int cpu); |
| 6 | 8 | ||
diff --git a/arch/x86/include/asm/numa_64.h b/arch/x86/include/asm/numa_64.h index 5ae87285a50..0493be39607 100644 --- a/arch/x86/include/asm/numa_64.h +++ b/arch/x86/include/asm/numa_64.h | |||
| @@ -40,6 +40,7 @@ extern void __cpuinit numa_remove_cpu(int cpu); | |||
| 40 | #ifdef CONFIG_NUMA_EMU | 40 | #ifdef CONFIG_NUMA_EMU |
| 41 | #define FAKE_NODE_MIN_SIZE ((u64)32 << 20) | 41 | #define FAKE_NODE_MIN_SIZE ((u64)32 << 20) |
| 42 | #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL)) | 42 | #define FAKE_NODE_MIN_HASH_MASK (~(FAKE_NODE_MIN_SIZE - 1UL)) |
| 43 | void numa_emu_cmdline(char *); | ||
| 43 | #endif /* CONFIG_NUMA_EMU */ | 44 | #endif /* CONFIG_NUMA_EMU */ |
| 44 | #else | 45 | #else |
| 45 | static inline void init_cpu_to_node(void) { } | 46 | static inline void init_cpu_to_node(void) { } |
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S index b34ab80fddd..bf470075518 100644 --- a/arch/x86/kernel/vmlinux.lds.S +++ b/arch/x86/kernel/vmlinux.lds.S | |||
| @@ -34,9 +34,11 @@ OUTPUT_FORMAT(CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT, CONFIG_OUTPUT_FORMAT) | |||
| 34 | #ifdef CONFIG_X86_32 | 34 | #ifdef CONFIG_X86_32 |
| 35 | OUTPUT_ARCH(i386) | 35 | OUTPUT_ARCH(i386) |
| 36 | ENTRY(phys_startup_32) | 36 | ENTRY(phys_startup_32) |
| 37 | jiffies = jiffies_64; | ||
| 37 | #else | 38 | #else |
| 38 | OUTPUT_ARCH(i386:x86-64) | 39 | OUTPUT_ARCH(i386:x86-64) |
| 39 | ENTRY(phys_startup_64) | 40 | ENTRY(phys_startup_64) |
| 41 | jiffies_64 = jiffies; | ||
| 40 | #endif | 42 | #endif |
| 41 | 43 | ||
| 42 | #if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) | 44 | #if defined(CONFIG_X86_64) && defined(CONFIG_DEBUG_RODATA) |
| @@ -140,15 +142,6 @@ SECTIONS | |||
| 140 | CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) | 142 | CACHELINE_ALIGNED_DATA(L1_CACHE_BYTES) |
| 141 | 143 | ||
| 142 | DATA_DATA | 144 | DATA_DATA |
| 143 | /* | ||
| 144 | * Workaround a binutils (2.20.51.0.12 to 2.21.51.0.3) bug. | ||
| 145 | * This makes jiffies relocatable in such binutils | ||
| 146 | */ | ||
| 147 | #ifdef CONFIG_X86_32 | ||
| 148 | jiffies = jiffies_64; | ||
| 149 | #else | ||
| 150 | jiffies_64 = jiffies; | ||
| 151 | #endif | ||
| 152 | CONSTRUCTORS | 145 | CONSTRUCTORS |
| 153 | 146 | ||
| 154 | /* rarely changed data like cpu maps */ | 147 | /* rarely changed data like cpu maps */ |
diff --git a/arch/x86/lguest/Kconfig b/arch/x86/lguest/Kconfig index 38718041efc..6e121a2a49e 100644 --- a/arch/x86/lguest/Kconfig +++ b/arch/x86/lguest/Kconfig | |||
| @@ -2,6 +2,7 @@ config LGUEST_GUEST | |||
| 2 | bool "Lguest guest support" | 2 | bool "Lguest guest support" |
| 3 | select PARAVIRT | 3 | select PARAVIRT |
| 4 | depends on X86_32 | 4 | depends on X86_32 |
| 5 | select VIRTUALIZATION | ||
| 5 | select VIRTIO | 6 | select VIRTIO |
| 6 | select VIRTIO_RING | 7 | select VIRTIO_RING |
| 7 | select VIRTIO_CONSOLE | 8 | select VIRTIO_CONSOLE |
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index 4996cf5f73a..eba687f0cc0 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
| @@ -824,7 +824,7 @@ static void __init lguest_init_IRQ(void) | |||
| 824 | 824 | ||
| 825 | for (i = FIRST_EXTERNAL_VECTOR; i < NR_VECTORS; i++) { | 825 | for (i = FIRST_EXTERNAL_VECTOR; i < NR_VECTORS; i++) { |
| 826 | /* Some systems map "vectors" to interrupts weirdly. Not us! */ | 826 | /* Some systems map "vectors" to interrupts weirdly. Not us! */ |
| 827 | __get_cpu_var(vector_irq)[i] = i - FIRST_EXTERNAL_VECTOR; | 827 | __this_cpu_write(vector_irq[i], i - FIRST_EXTERNAL_VECTOR); |
| 828 | if (i != SYSCALL_VECTOR) | 828 | if (i != SYSCALL_VECTOR) |
| 829 | set_intr_gate(i, interrupt[i - FIRST_EXTERNAL_VECTOR]); | 829 | set_intr_gate(i, interrupt[i - FIRST_EXTERNAL_VECTOR]); |
| 830 | } | 830 | } |
diff --git a/arch/x86/mm/numa.c b/arch/x86/mm/numa.c index 787c52ca49c..ebf6d7887a3 100644 --- a/arch/x86/mm/numa.c +++ b/arch/x86/mm/numa.c | |||
| @@ -2,6 +2,28 @@ | |||
| 2 | #include <linux/topology.h> | 2 | #include <linux/topology.h> |
| 3 | #include <linux/module.h> | 3 | #include <linux/module.h> |
| 4 | #include <linux/bootmem.h> | 4 | #include <linux/bootmem.h> |
| 5 | #include <asm/numa.h> | ||
| 6 | #include <asm/acpi.h> | ||
| 7 | |||
| 8 | int __initdata numa_off; | ||
| 9 | |||
| 10 | static __init int numa_setup(char *opt) | ||
| 11 | { | ||
| 12 | if (!opt) | ||
| 13 | return -EINVAL; | ||
| 14 | if (!strncmp(opt, "off", 3)) | ||
| 15 | numa_off = 1; | ||
| 16 | #ifdef CONFIG_NUMA_EMU | ||
| 17 | if (!strncmp(opt, "fake=", 5)) | ||
| 18 | numa_emu_cmdline(opt + 5); | ||
| 19 | #endif | ||
| 20 | #ifdef CONFIG_ACPI_NUMA | ||
| 21 | if (!strncmp(opt, "noacpi", 6)) | ||
| 22 | acpi_numa = -1; | ||
| 23 | #endif | ||
| 24 | return 0; | ||
| 25 | } | ||
| 26 | early_param("numa", numa_setup); | ||
| 5 | 27 | ||
| 6 | /* | 28 | /* |
| 7 | * Which logical CPUs are on which nodes | 29 | * Which logical CPUs are on which nodes |
diff --git a/arch/x86/mm/numa_64.c b/arch/x86/mm/numa_64.c index 1e72102e80c..95ea1551eeb 100644 --- a/arch/x86/mm/numa_64.c +++ b/arch/x86/mm/numa_64.c | |||
| @@ -30,7 +30,6 @@ s16 apicid_to_node[MAX_LOCAL_APIC] __cpuinitdata = { | |||
| 30 | [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE | 30 | [0 ... MAX_LOCAL_APIC-1] = NUMA_NO_NODE |
| 31 | }; | 31 | }; |
| 32 | 32 | ||
| 33 | int numa_off __initdata; | ||
| 34 | static unsigned long __initdata nodemap_addr; | 33 | static unsigned long __initdata nodemap_addr; |
| 35 | static unsigned long __initdata nodemap_size; | 34 | static unsigned long __initdata nodemap_size; |
| 36 | 35 | ||
| @@ -263,6 +262,11 @@ static struct bootnode nodes[MAX_NUMNODES] __initdata; | |||
| 263 | static struct bootnode physnodes[MAX_NUMNODES] __cpuinitdata; | 262 | static struct bootnode physnodes[MAX_NUMNODES] __cpuinitdata; |
| 264 | static char *cmdline __initdata; | 263 | static char *cmdline __initdata; |
| 265 | 264 | ||
| 265 | void __init numa_emu_cmdline(char *str) | ||
| 266 | { | ||
| 267 | cmdline = str; | ||
| 268 | } | ||
| 269 | |||
| 266 | static int __init setup_physnodes(unsigned long start, unsigned long end, | 270 | static int __init setup_physnodes(unsigned long start, unsigned long end, |
| 267 | int acpi, int amd) | 271 | int acpi, int amd) |
| 268 | { | 272 | { |
| @@ -670,24 +674,6 @@ unsigned long __init numa_free_all_bootmem(void) | |||
| 670 | return pages; | 674 | return pages; |
| 671 | } | 675 | } |
| 672 | 676 | ||
| 673 | static __init int numa_setup(char *opt) | ||
| 674 | { | ||
| 675 | if (!opt) | ||
| 676 | return -EINVAL; | ||
| 677 | if (!strncmp(opt, "off", 3)) | ||
| 678 | numa_off = 1; | ||
| 679 | #ifdef CONFIG_NUMA_EMU | ||
| 680 | if (!strncmp(opt, "fake=", 5)) | ||
| 681 | cmdline = opt + 5; | ||
| 682 | #endif | ||
| 683 | #ifdef CONFIG_ACPI_NUMA | ||
| 684 | if (!strncmp(opt, "noacpi", 6)) | ||
| 685 | acpi_numa = -1; | ||
| 686 | #endif | ||
| 687 | return 0; | ||
| 688 | } | ||
| 689 | early_param("numa", numa_setup); | ||
| 690 | |||
| 691 | #ifdef CONFIG_NUMA | 677 | #ifdef CONFIG_NUMA |
| 692 | 678 | ||
| 693 | static __init int find_near_online_node(int node) | 679 | static __init int find_near_online_node(int node) |
diff --git a/arch/x86/mm/srat_32.c b/arch/x86/mm/srat_32.c index f16434568a5..ae96e7b8051 100644 --- a/arch/x86/mm/srat_32.c +++ b/arch/x86/mm/srat_32.c | |||
| @@ -59,7 +59,6 @@ static struct node_memory_chunk_s __initdata node_memory_chunk[MAXCHUNKS]; | |||
| 59 | static int __initdata num_memory_chunks; /* total number of memory chunks */ | 59 | static int __initdata num_memory_chunks; /* total number of memory chunks */ |
| 60 | static u8 __initdata apicid_to_pxm[MAX_APICID]; | 60 | static u8 __initdata apicid_to_pxm[MAX_APICID]; |
| 61 | 61 | ||
| 62 | int numa_off __initdata; | ||
| 63 | int acpi_numa __initdata; | 62 | int acpi_numa __initdata; |
| 64 | 63 | ||
| 65 | static __init void bad_srat(void) | 64 | static __init void bad_srat(void) |
diff --git a/drivers/acpi/acpica/accommon.h b/drivers/acpi/acpica/accommon.h index 3e50c74ed4a..e0ba17f0a7c 100644 --- a/drivers/acpi/acpica/accommon.h +++ b/drivers/acpi/acpica/accommon.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acconfig.h b/drivers/acpi/acpica/acconfig.h index b17d8de9f6f..ab87396c2c0 100644 --- a/drivers/acpi/acpica/acconfig.h +++ b/drivers/acpi/acpica/acconfig.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acdebug.h b/drivers/acpi/acpica/acdebug.h index 72e9d5eb083..eb0b1f8dee6 100644 --- a/drivers/acpi/acpica/acdebug.h +++ b/drivers/acpi/acpica/acdebug.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acdispat.h b/drivers/acpi/acpica/acdispat.h index 894a0ff2a94..666271b6541 100644 --- a/drivers/acpi/acpica/acdispat.h +++ b/drivers/acpi/acpica/acdispat.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acevents.h b/drivers/acpi/acpica/acevents.h index 70e0b28801a..41d247daf46 100644 --- a/drivers/acpi/acpica/acevents.h +++ b/drivers/acpi/acpica/acevents.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acglobal.h b/drivers/acpi/acpica/acglobal.h index 0e4dba0d032..82a1bd283db 100644 --- a/drivers/acpi/acpica/acglobal.h +++ b/drivers/acpi/acpica/acglobal.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/achware.h b/drivers/acpi/acpica/achware.h index 258d628793e..e7213beaafc 100644 --- a/drivers/acpi/acpica/achware.h +++ b/drivers/acpi/acpica/achware.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acinterp.h b/drivers/acpi/acpica/acinterp.h index 049e203bd62..3731e1c34b8 100644 --- a/drivers/acpi/acpica/acinterp.h +++ b/drivers/acpi/acpica/acinterp.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/aclocal.h b/drivers/acpi/acpica/aclocal.h index 74000f5b7da..54784bb42ce 100644 --- a/drivers/acpi/acpica/aclocal.h +++ b/drivers/acpi/acpica/aclocal.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acmacros.h b/drivers/acpi/acpica/acmacros.h index 8d5c9e0a495..b7491ee1fba 100644 --- a/drivers/acpi/acpica/acmacros.h +++ b/drivers/acpi/acpica/acmacros.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acnamesp.h b/drivers/acpi/acpica/acnamesp.h index d44d3bc5b84..79a598c67fe 100644 --- a/drivers/acpi/acpica/acnamesp.h +++ b/drivers/acpi/acpica/acnamesp.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acobject.h b/drivers/acpi/acpica/acobject.h index 962a3ccff6f..1055769f2f0 100644 --- a/drivers/acpi/acpica/acobject.h +++ b/drivers/acpi/acpica/acobject.h | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
| @@ -97,8 +97,6 @@ | |||
| 97 | #define AOPOBJ_OBJECT_INITIALIZED 0x08 /* Region is initialized, _REG was run */ | 97 | #define AOPOBJ_OBJECT_INITIALIZED 0x08 /* Region is initialized, _REG was run */ |
| 98 | #define AOPOBJ_SETUP_COMPLETE 0x10 /* Region setup is complete */ | 98 | #define AOPOBJ_SETUP_COMPLETE 0x10 /* Region setup is complete */ |
| 99 | #define AOPOBJ_INVALID 0x20 /* Host OS won't allow a Region address */ | 99 | #define AOPOBJ_INVALID 0x20 /* Host OS won't allow a Region address */ |
| 100 | #define AOPOBJ_MODULE_LEVEL 0x40 /* Method is actually module-level code */ | ||
| 101 | #define AOPOBJ_MODIFIED_NAMESPACE 0x80 /* Method modified the namespace */ | ||
| 102 | 100 | ||
| 103 | /****************************************************************************** | 101 | /****************************************************************************** |
| 104 | * | 102 | * |
| @@ -175,7 +173,7 @@ struct acpi_object_region { | |||
| 175 | }; | 173 | }; |
| 176 | 174 | ||
| 177 | struct acpi_object_method { | 175 | struct acpi_object_method { |
| 178 | ACPI_OBJECT_COMMON_HEADER u8 method_flags; | 176 | ACPI_OBJECT_COMMON_HEADER u8 info_flags; |
| 179 | u8 param_count; | 177 | u8 param_count; |
| 180 | u8 sync_level; | 178 | u8 sync_level; |
| 181 | union acpi_operand_object *mutex; | 179 | union acpi_operand_object *mutex; |
| @@ -183,13 +181,21 @@ struct acpi_object_method { | |||
| 183 | union { | 181 | union { |
| 184 | ACPI_INTERNAL_METHOD implementation; | 182 | ACPI_INTERNAL_METHOD implementation; |
| 185 | union acpi_operand_object *handler; | 183 | union acpi_operand_object *handler; |
| 186 | } extra; | 184 | } dispatch; |
| 187 | 185 | ||
| 188 | u32 aml_length; | 186 | u32 aml_length; |
| 189 | u8 thread_count; | 187 | u8 thread_count; |
| 190 | acpi_owner_id owner_id; | 188 | acpi_owner_id owner_id; |
| 191 | }; | 189 | }; |
| 192 | 190 | ||
| 191 | /* Flags for info_flags field above */ | ||
| 192 | |||
| 193 | #define ACPI_METHOD_MODULE_LEVEL 0x01 /* Method is actually module-level code */ | ||
| 194 | #define ACPI_METHOD_INTERNAL_ONLY 0x02 /* Method is implemented internally (_OSI) */ | ||
| 195 | #define ACPI_METHOD_SERIALIZED 0x04 /* Method is serialized */ | ||
| 196 | #define ACPI_METHOD_SERIALIZED_PENDING 0x08 /* Method is to be marked serialized */ | ||
| 197 | #define ACPI_METHOD_MODIFIED_NAMESPACE 0x10 /* Method modified the namespace */ | ||
| 198 | |||
| 193 | /****************************************************************************** | 199 | /****************************************************************************** |
| 194 | * | 200 | * |
| 195 | * Objects that can be notified. All share a common notify_info area. | 201 | * Objects that can be notified. All share a common notify_info area. |
diff --git a/drivers/acpi/acpica/acopcode.h b/drivers/acpi/acpica/acopcode.h index 8c15ff43f42..bb2ccfad737 100644 --- a/drivers/acpi/acpica/acopcode.h +++ b/drivers/acpi/acpica/acopcode.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acparser.h b/drivers/acpi/acpica/acparser.h index d0bb0fd3e57..5ea1e06afa2 100644 --- a/drivers/acpi/acpica/acparser.h +++ b/drivers/acpi/acpica/acparser.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acpredef.h b/drivers/acpi/acpica/acpredef.h index 10998d369ad..94e73c97cf8 100644 --- a/drivers/acpi/acpica/acpredef.h +++ b/drivers/acpi/acpica/acpredef.h | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acresrc.h b/drivers/acpi/acpica/acresrc.h index 528bcbaf4ce..f08b55b7f3a 100644 --- a/drivers/acpi/acpica/acresrc.h +++ b/drivers/acpi/acpica/acresrc.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acstruct.h b/drivers/acpi/acpica/acstruct.h index 6e5dd97949f..1623b245dde 100644 --- a/drivers/acpi/acpica/acstruct.h +++ b/drivers/acpi/acpica/acstruct.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/actables.h b/drivers/acpi/acpica/actables.h index 62a576e3436..967f08124eb 100644 --- a/drivers/acpi/acpica/actables.h +++ b/drivers/acpi/acpica/actables.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/acutils.h b/drivers/acpi/acpica/acutils.h index 72e4183c193..99c140d8e34 100644 --- a/drivers/acpi/acpica/acutils.h +++ b/drivers/acpi/acpica/acutils.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/amlcode.h b/drivers/acpi/acpica/amlcode.h index 1f484ba228f..f4f0998d396 100644 --- a/drivers/acpi/acpica/amlcode.h +++ b/drivers/acpi/acpica/amlcode.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | *****************************************************************************/ | 7 | *****************************************************************************/ |
| 8 | 8 | ||
| 9 | /* | 9 | /* |
| 10 | * Copyright (C) 2000 - 2010, Intel Corp. | 10 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 11 | * All rights reserved. | 11 | * All rights reserved. |
| 12 | * | 12 | * |
| 13 | * Redistribution and use in source and binary forms, with or without | 13 | * Redistribution and use in source and binary forms, with or without |
| @@ -480,16 +480,10 @@ typedef enum { | |||
| 480 | AML_FIELD_ATTRIB_SMB_BLOCK_CALL = 0x0D | 480 | AML_FIELD_ATTRIB_SMB_BLOCK_CALL = 0x0D |
| 481 | } AML_ACCESS_ATTRIBUTE; | 481 | } AML_ACCESS_ATTRIBUTE; |
| 482 | 482 | ||
| 483 | /* Bit fields in method_flags byte */ | 483 | /* Bit fields in the AML method_flags byte */ |
| 484 | 484 | ||
| 485 | #define AML_METHOD_ARG_COUNT 0x07 | 485 | #define AML_METHOD_ARG_COUNT 0x07 |
| 486 | #define AML_METHOD_SERIALIZED 0x08 | 486 | #define AML_METHOD_SERIALIZED 0x08 |
| 487 | #define AML_METHOD_SYNC_LEVEL 0xF0 | 487 | #define AML_METHOD_SYNC_LEVEL 0xF0 |
| 488 | 488 | ||
| 489 | /* METHOD_FLAGS_ARG_COUNT is not used internally, define additional flags */ | ||
| 490 | |||
| 491 | #define AML_METHOD_INTERNAL_ONLY 0x01 | ||
| 492 | #define AML_METHOD_RESERVED1 0x02 | ||
| 493 | #define AML_METHOD_RESERVED2 0x04 | ||
| 494 | |||
| 495 | #endif /* __AMLCODE_H__ */ | 489 | #endif /* __AMLCODE_H__ */ |
diff --git a/drivers/acpi/acpica/amlresrc.h b/drivers/acpi/acpica/amlresrc.h index 0e5798fcbb1..59122cde247 100644 --- a/drivers/acpi/acpica/amlresrc.h +++ b/drivers/acpi/acpica/amlresrc.h | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dsfield.c b/drivers/acpi/acpica/dsfield.c index 347bee1726f..34be60c0e44 100644 --- a/drivers/acpi/acpica/dsfield.c +++ b/drivers/acpi/acpica/dsfield.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dsinit.c b/drivers/acpi/acpica/dsinit.c index cc4a38c5755..a7718bf2b9a 100644 --- a/drivers/acpi/acpica/dsinit.c +++ b/drivers/acpi/acpica/dsinit.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dsmethod.c b/drivers/acpi/acpica/dsmethod.c index d94dd8974b5..5d797751e20 100644 --- a/drivers/acpi/acpica/dsmethod.c +++ b/drivers/acpi/acpica/dsmethod.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -43,7 +43,6 @@ | |||
| 43 | 43 | ||
| 44 | #include <acpi/acpi.h> | 44 | #include <acpi/acpi.h> |
| 45 | #include "accommon.h" | 45 | #include "accommon.h" |
| 46 | #include "amlcode.h" | ||
| 47 | #include "acdispat.h" | 46 | #include "acdispat.h" |
| 48 | #include "acinterp.h" | 47 | #include "acinterp.h" |
| 49 | #include "acnamesp.h" | 48 | #include "acnamesp.h" |
| @@ -201,7 +200,7 @@ acpi_ds_begin_method_execution(struct acpi_namespace_node *method_node, | |||
| 201 | /* | 200 | /* |
| 202 | * If this method is serialized, we need to acquire the method mutex. | 201 | * If this method is serialized, we need to acquire the method mutex. |
| 203 | */ | 202 | */ |
| 204 | if (obj_desc->method.method_flags & AML_METHOD_SERIALIZED) { | 203 | if (obj_desc->method.info_flags & ACPI_METHOD_SERIALIZED) { |
| 205 | /* | 204 | /* |
| 206 | * Create a mutex for the method if it is defined to be Serialized | 205 | * Create a mutex for the method if it is defined to be Serialized |
| 207 | * and a mutex has not already been created. We defer the mutex creation | 206 | * and a mutex has not already been created. We defer the mutex creation |
| @@ -413,8 +412,9 @@ acpi_ds_call_control_method(struct acpi_thread_state *thread, | |||
| 413 | 412 | ||
| 414 | /* Invoke an internal method if necessary */ | 413 | /* Invoke an internal method if necessary */ |
| 415 | 414 | ||
| 416 | if (obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) { | 415 | if (obj_desc->method.info_flags & ACPI_METHOD_INTERNAL_ONLY) { |
| 417 | status = obj_desc->method.extra.implementation(next_walk_state); | 416 | status = |
| 417 | obj_desc->method.dispatch.implementation(next_walk_state); | ||
| 418 | if (status == AE_OK) { | 418 | if (status == AE_OK) { |
| 419 | status = AE_CTRL_TERMINATE; | 419 | status = AE_CTRL_TERMINATE; |
| 420 | } | 420 | } |
| @@ -579,11 +579,14 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc, | |||
| 579 | 579 | ||
| 580 | /* | 580 | /* |
| 581 | * Delete any namespace objects created anywhere within the | 581 | * Delete any namespace objects created anywhere within the |
| 582 | * namespace by the execution of this method. Unless this method | 582 | * namespace by the execution of this method. Unless: |
| 583 | * is a module-level executable code method, in which case we | 583 | * 1) This method is a module-level executable code method, in which |
| 584 | * want make the objects permanent. | 584 | * case we want make the objects permanent. |
| 585 | * 2) There are other threads executing the method, in which case we | ||
| 586 | * will wait until the last thread has completed. | ||
| 585 | */ | 587 | */ |
| 586 | if (!(method_desc->method.flags & AOPOBJ_MODULE_LEVEL)) { | 588 | if (!(method_desc->method.info_flags & ACPI_METHOD_MODULE_LEVEL) |
| 589 | && (method_desc->method.thread_count == 1)) { | ||
| 587 | 590 | ||
| 588 | /* Delete any direct children of (created by) this method */ | 591 | /* Delete any direct children of (created by) this method */ |
| 589 | 592 | ||
| @@ -593,12 +596,17 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc, | |||
| 593 | /* | 596 | /* |
| 594 | * Delete any objects that were created by this method | 597 | * Delete any objects that were created by this method |
| 595 | * elsewhere in the namespace (if any were created). | 598 | * elsewhere in the namespace (if any were created). |
| 599 | * Use of the ACPI_METHOD_MODIFIED_NAMESPACE optimizes the | ||
| 600 | * deletion such that we don't have to perform an entire | ||
| 601 | * namespace walk for every control method execution. | ||
| 596 | */ | 602 | */ |
| 597 | if (method_desc->method. | 603 | if (method_desc->method. |
| 598 | flags & AOPOBJ_MODIFIED_NAMESPACE) { | 604 | info_flags & ACPI_METHOD_MODIFIED_NAMESPACE) { |
| 599 | acpi_ns_delete_namespace_by_owner(method_desc-> | 605 | acpi_ns_delete_namespace_by_owner(method_desc-> |
| 600 | method. | 606 | method. |
| 601 | owner_id); | 607 | owner_id); |
| 608 | method_desc->method.info_flags &= | ||
| 609 | ~ACPI_METHOD_MODIFIED_NAMESPACE; | ||
| 602 | } | 610 | } |
| 603 | } | 611 | } |
| 604 | } | 612 | } |
| @@ -629,19 +637,43 @@ acpi_ds_terminate_control_method(union acpi_operand_object *method_desc, | |||
| 629 | * Serialized if it appears that the method is incorrectly written and | 637 | * Serialized if it appears that the method is incorrectly written and |
| 630 | * does not support multiple thread execution. The best example of this | 638 | * does not support multiple thread execution. The best example of this |
| 631 | * is if such a method creates namespace objects and blocks. A second | 639 | * is if such a method creates namespace objects and blocks. A second |
| 632 | * thread will fail with an AE_ALREADY_EXISTS exception | 640 | * thread will fail with an AE_ALREADY_EXISTS exception. |
| 633 | * | 641 | * |
| 634 | * This code is here because we must wait until the last thread exits | 642 | * This code is here because we must wait until the last thread exits |
| 635 | * before creating the synchronization semaphore. | 643 | * before marking the method as serialized. |
| 636 | */ | 644 | */ |
| 637 | if ((method_desc->method.method_flags & AML_METHOD_SERIALIZED) | 645 | if (method_desc->method. |
| 638 | && (!method_desc->method.mutex)) { | 646 | info_flags & ACPI_METHOD_SERIALIZED_PENDING) { |
| 639 | (void)acpi_ds_create_method_mutex(method_desc); | 647 | if (walk_state) { |
| 648 | ACPI_INFO((AE_INFO, | ||
| 649 | "Marking method %4.4s as Serialized because of AE_ALREADY_EXISTS error", | ||
| 650 | walk_state->method_node->name. | ||
| 651 | ascii)); | ||
| 652 | } | ||
| 653 | |||
| 654 | /* | ||
| 655 | * Method tried to create an object twice and was marked as | ||
| 656 | * "pending serialized". The probable cause is that the method | ||
| 657 | * cannot handle reentrancy. | ||
| 658 | * | ||
| 659 | * The method was created as not_serialized, but it tried to create | ||
| 660 | * a named object and then blocked, causing the second thread | ||
| 661 | * entrance to begin and then fail. Workaround this problem by | ||
| 662 | * marking the method permanently as Serialized when the last | ||
| 663 | * thread exits here. | ||
| 664 | */ | ||
| 665 | method_desc->method.info_flags &= | ||
| 666 | ~ACPI_METHOD_SERIALIZED_PENDING; | ||
| 667 | method_desc->method.info_flags |= | ||
| 668 | ACPI_METHOD_SERIALIZED; | ||
| 669 | method_desc->method.sync_level = 0; | ||
| 640 | } | 670 | } |
| 641 | 671 | ||
| 642 | /* No more threads, we can free the owner_id */ | 672 | /* No more threads, we can free the owner_id */ |
| 643 | 673 | ||
| 644 | if (!(method_desc->method.flags & AOPOBJ_MODULE_LEVEL)) { | 674 | if (! |
| 675 | (method_desc->method. | ||
| 676 | info_flags & ACPI_METHOD_MODULE_LEVEL)) { | ||
| 645 | acpi_ut_release_owner_id(&method_desc->method.owner_id); | 677 | acpi_ut_release_owner_id(&method_desc->method.owner_id); |
| 646 | } | 678 | } |
| 647 | } | 679 | } |
diff --git a/drivers/acpi/acpica/dsmthdat.c b/drivers/acpi/acpica/dsmthdat.c index 8095306fcd8..905ce29a92e 100644 --- a/drivers/acpi/acpica/dsmthdat.c +++ b/drivers/acpi/acpica/dsmthdat.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dsobject.c b/drivers/acpi/acpica/dsobject.c index 8e85f54a8e0..f42e17e5c25 100644 --- a/drivers/acpi/acpica/dsobject.c +++ b/drivers/acpi/acpica/dsobject.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dsopcode.c b/drivers/acpi/acpica/dsopcode.c index 7c0e7422717..bbecf293aee 100644 --- a/drivers/acpi/acpica/dsopcode.c +++ b/drivers/acpi/acpica/dsopcode.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dsutils.c b/drivers/acpi/acpica/dsutils.c index 15135c25aa9..2c477ce172f 100644 --- a/drivers/acpi/acpica/dsutils.c +++ b/drivers/acpi/acpica/dsutils.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dswexec.c b/drivers/acpi/acpica/dswexec.c index 6b0b5d08d97..fe40e4c6554 100644 --- a/drivers/acpi/acpica/dswexec.c +++ b/drivers/acpi/acpica/dswexec.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dswload.c b/drivers/acpi/acpica/dswload.c index 140a9d00295..52566ff5e90 100644 --- a/drivers/acpi/acpica/dswload.c +++ b/drivers/acpi/acpica/dswload.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dswscope.c b/drivers/acpi/acpica/dswscope.c index d1e701709da..76a661fc1e0 100644 --- a/drivers/acpi/acpica/dswscope.c +++ b/drivers/acpi/acpica/dswscope.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/dswstate.c b/drivers/acpi/acpica/dswstate.c index 83155dd8671..a6c374ef991 100644 --- a/drivers/acpi/acpica/dswstate.c +++ b/drivers/acpi/acpica/dswstate.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evevent.c b/drivers/acpi/acpica/evevent.c index e5e313c663a..d458b041e65 100644 --- a/drivers/acpi/acpica/evevent.c +++ b/drivers/acpi/acpica/evevent.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evgpe.c b/drivers/acpi/acpica/evgpe.c index 7c339d34ab4..14988a86066 100644 --- a/drivers/acpi/acpica/evgpe.c +++ b/drivers/acpi/acpica/evgpe.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -471,6 +471,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context) | |||
| 471 | 471 | ||
| 472 | status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); | 472 | status = acpi_ut_acquire_mutex(ACPI_MTX_EVENTS); |
| 473 | if (ACPI_FAILURE(status)) { | 473 | if (ACPI_FAILURE(status)) { |
| 474 | ACPI_FREE(local_gpe_event_info); | ||
| 474 | return_VOID; | 475 | return_VOID; |
| 475 | } | 476 | } |
| 476 | 477 | ||
| @@ -478,6 +479,7 @@ static void ACPI_SYSTEM_XFACE acpi_ev_asynch_execute_gpe_method(void *context) | |||
| 478 | 479 | ||
| 479 | if (!acpi_ev_valid_gpe_event(gpe_event_info)) { | 480 | if (!acpi_ev_valid_gpe_event(gpe_event_info)) { |
| 480 | status = acpi_ut_release_mutex(ACPI_MTX_EVENTS); | 481 | status = acpi_ut_release_mutex(ACPI_MTX_EVENTS); |
| 482 | ACPI_FREE(local_gpe_event_info); | ||
| 481 | return_VOID; | 483 | return_VOID; |
| 482 | } | 484 | } |
| 483 | 485 | ||
diff --git a/drivers/acpi/acpica/evgpeblk.c b/drivers/acpi/acpica/evgpeblk.c index 9acb86958c0..ca2c41a5331 100644 --- a/drivers/acpi/acpica/evgpeblk.c +++ b/drivers/acpi/acpica/evgpeblk.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evgpeinit.c b/drivers/acpi/acpica/evgpeinit.c index c59dc234059..ce9aa9f9a97 100644 --- a/drivers/acpi/acpica/evgpeinit.c +++ b/drivers/acpi/acpica/evgpeinit.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evgpeutil.c b/drivers/acpi/acpica/evgpeutil.c index 10e477494dc..80a81d0c4a8 100644 --- a/drivers/acpi/acpica/evgpeutil.c +++ b/drivers/acpi/acpica/evgpeutil.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evmisc.c b/drivers/acpi/acpica/evmisc.c index 38bba66fcce..7dc80946f7b 100644 --- a/drivers/acpi/acpica/evmisc.c +++ b/drivers/acpi/acpica/evmisc.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evregion.c b/drivers/acpi/acpica/evregion.c index 98fd210e87b..785a5ee6458 100644 --- a/drivers/acpi/acpica/evregion.c +++ b/drivers/acpi/acpica/evregion.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evrgnini.c b/drivers/acpi/acpica/evrgnini.c index 0b47a6dc929..9659cee6093 100644 --- a/drivers/acpi/acpica/evrgnini.c +++ b/drivers/acpi/acpica/evrgnini.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -590,9 +590,9 @@ acpi_ev_initialize_region(union acpi_operand_object *region_obj, | |||
| 590 | * See acpi_ns_exec_module_code | 590 | * See acpi_ns_exec_module_code |
| 591 | */ | 591 | */ |
| 592 | if (obj_desc->method. | 592 | if (obj_desc->method. |
| 593 | flags & AOPOBJ_MODULE_LEVEL) { | 593 | info_flags & ACPI_METHOD_MODULE_LEVEL) { |
| 594 | handler_obj = | 594 | handler_obj = |
| 595 | obj_desc->method.extra.handler; | 595 | obj_desc->method.dispatch.handler; |
| 596 | } | 596 | } |
| 597 | break; | 597 | break; |
| 598 | 598 | ||
diff --git a/drivers/acpi/acpica/evsci.c b/drivers/acpi/acpica/evsci.c index 8dfbaa96e42..2ebd40e1a3e 100644 --- a/drivers/acpi/acpica/evsci.c +++ b/drivers/acpi/acpica/evsci.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | ******************************************************************************/ | 6 | ******************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evxface.c b/drivers/acpi/acpica/evxface.c index 1226689bdb1..e1141402dbe 100644 --- a/drivers/acpi/acpica/evxface.c +++ b/drivers/acpi/acpica/evxface.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evxfevnt.c b/drivers/acpi/acpica/evxfevnt.c index 90488c1e0f3..c57b5c707a7 100644 --- a/drivers/acpi/acpica/evxfevnt.c +++ b/drivers/acpi/acpica/evxfevnt.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evxfgpe.c b/drivers/acpi/acpica/evxfgpe.c index 416845bc9c1..e9562a7cb2f 100644 --- a/drivers/acpi/acpica/evxfgpe.c +++ b/drivers/acpi/acpica/evxfgpe.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/evxfregn.c b/drivers/acpi/acpica/evxfregn.c index ce9314f7945..eb738676371 100644 --- a/drivers/acpi/acpica/evxfregn.c +++ b/drivers/acpi/acpica/evxfregn.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exconfig.c b/drivers/acpi/acpica/exconfig.c index 18832205b63..745a42b401f 100644 --- a/drivers/acpi/acpica/exconfig.c +++ b/drivers/acpi/acpica/exconfig.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exconvrt.c b/drivers/acpi/acpica/exconvrt.c index b73bc50c5b7..74162a11817 100644 --- a/drivers/acpi/acpica/exconvrt.c +++ b/drivers/acpi/acpica/exconvrt.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/excreate.c b/drivers/acpi/acpica/excreate.c index 3c61b48c73f..e7b372d1766 100644 --- a/drivers/acpi/acpica/excreate.c +++ b/drivers/acpi/acpica/excreate.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -482,13 +482,11 @@ acpi_ex_create_method(u8 * aml_start, | |||
| 482 | obj_desc->method.aml_length = aml_length; | 482 | obj_desc->method.aml_length = aml_length; |
| 483 | 483 | ||
| 484 | /* | 484 | /* |
| 485 | * Disassemble the method flags. Split off the Arg Count | 485 | * Disassemble the method flags. Split off the arg_count, Serialized |
| 486 | * for efficiency | 486 | * flag, and sync_level for efficiency. |
| 487 | */ | 487 | */ |
| 488 | method_flags = (u8) operand[1]->integer.value; | 488 | method_flags = (u8) operand[1]->integer.value; |
| 489 | 489 | ||
| 490 | obj_desc->method.method_flags = | ||
| 491 | (u8) (method_flags & ~AML_METHOD_ARG_COUNT); | ||
| 492 | obj_desc->method.param_count = | 490 | obj_desc->method.param_count = |
| 493 | (u8) (method_flags & AML_METHOD_ARG_COUNT); | 491 | (u8) (method_flags & AML_METHOD_ARG_COUNT); |
| 494 | 492 | ||
| @@ -497,6 +495,8 @@ acpi_ex_create_method(u8 * aml_start, | |||
| 497 | * created for this method when it is parsed. | 495 | * created for this method when it is parsed. |
| 498 | */ | 496 | */ |
| 499 | if (method_flags & AML_METHOD_SERIALIZED) { | 497 | if (method_flags & AML_METHOD_SERIALIZED) { |
| 498 | obj_desc->method.info_flags = ACPI_METHOD_SERIALIZED; | ||
| 499 | |||
| 500 | /* | 500 | /* |
| 501 | * ACPI 1.0: sync_level = 0 | 501 | * ACPI 1.0: sync_level = 0 |
| 502 | * ACPI 2.0: sync_level = sync_level in method declaration | 502 | * ACPI 2.0: sync_level = sync_level in method declaration |
diff --git a/drivers/acpi/acpica/exdebug.c b/drivers/acpi/acpica/exdebug.c index be8c98b480d..c7a2f1edd28 100644 --- a/drivers/acpi/acpica/exdebug.c +++ b/drivers/acpi/acpica/exdebug.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exdump.c b/drivers/acpi/acpica/exdump.c index f067bbb0d96..61b8c0e8b74 100644 --- a/drivers/acpi/acpica/exdump.c +++ b/drivers/acpi/acpica/exdump.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -122,7 +122,7 @@ static struct acpi_exdump_info acpi_ex_dump_event[2] = { | |||
| 122 | 122 | ||
| 123 | static struct acpi_exdump_info acpi_ex_dump_method[9] = { | 123 | static struct acpi_exdump_info acpi_ex_dump_method[9] = { |
| 124 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_method), NULL}, | 124 | {ACPI_EXD_INIT, ACPI_EXD_TABLE_SIZE(acpi_ex_dump_method), NULL}, |
| 125 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.method_flags), "Method Flags"}, | 125 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.info_flags), "Info Flags"}, |
| 126 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.param_count), | 126 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.param_count), |
| 127 | "Parameter Count"}, | 127 | "Parameter Count"}, |
| 128 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.sync_level), "Sync Level"}, | 128 | {ACPI_EXD_UINT8, ACPI_EXD_OFFSET(method.sync_level), "Sync Level"}, |
diff --git a/drivers/acpi/acpica/exfield.c b/drivers/acpi/acpica/exfield.c index f17d2ff0031..0bde2230c02 100644 --- a/drivers/acpi/acpica/exfield.c +++ b/drivers/acpi/acpica/exfield.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exfldio.c b/drivers/acpi/acpica/exfldio.c index 38293fd3e08..6c79c29f082 100644 --- a/drivers/acpi/acpica/exfldio.c +++ b/drivers/acpi/acpica/exfldio.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exmisc.c b/drivers/acpi/acpica/exmisc.c index 95db4be0877..703d88ed0b3 100644 --- a/drivers/acpi/acpica/exmisc.c +++ b/drivers/acpi/acpica/exmisc.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exmutex.c b/drivers/acpi/acpica/exmutex.c index 6af14e43f83..be1c56ead65 100644 --- a/drivers/acpi/acpica/exmutex.c +++ b/drivers/acpi/acpica/exmutex.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exnames.c b/drivers/acpi/acpica/exnames.c index d11e539ef76..49ec049c157 100644 --- a/drivers/acpi/acpica/exnames.c +++ b/drivers/acpi/acpica/exnames.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exoparg1.c b/drivers/acpi/acpica/exoparg1.c index 84e4d185aa2..236ead14b7f 100644 --- a/drivers/acpi/acpica/exoparg1.c +++ b/drivers/acpi/acpica/exoparg1.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exoparg2.c b/drivers/acpi/acpica/exoparg2.c index 10e104cf0fb..2571b4a310f 100644 --- a/drivers/acpi/acpica/exoparg2.c +++ b/drivers/acpi/acpica/exoparg2.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exoparg3.c b/drivers/acpi/acpica/exoparg3.c index 7a08d23befc..1b48d9d28c9 100644 --- a/drivers/acpi/acpica/exoparg3.c +++ b/drivers/acpi/acpica/exoparg3.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exoparg6.c b/drivers/acpi/acpica/exoparg6.c index 4b50730cf9a..f4a2787e8e9 100644 --- a/drivers/acpi/acpica/exoparg6.c +++ b/drivers/acpi/acpica/exoparg6.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exprep.c b/drivers/acpi/acpica/exprep.c index 7aae29f73d3..cc95e200040 100644 --- a/drivers/acpi/acpica/exprep.c +++ b/drivers/acpi/acpica/exprep.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exregion.c b/drivers/acpi/acpica/exregion.c index de17e10da0e..f0d5e14f1f2 100644 --- a/drivers/acpi/acpica/exregion.c +++ b/drivers/acpi/acpica/exregion.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exresnte.c b/drivers/acpi/acpica/exresnte.c index 1fa4289a687..55997e46948 100644 --- a/drivers/acpi/acpica/exresnte.c +++ b/drivers/acpi/acpica/exresnte.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exresolv.c b/drivers/acpi/acpica/exresolv.c index 7ca35ea8ace..db502cd7d93 100644 --- a/drivers/acpi/acpica/exresolv.c +++ b/drivers/acpi/acpica/exresolv.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exresop.c b/drivers/acpi/acpica/exresop.c index 8c97cfd6a0f..e3bb00ccdff 100644 --- a/drivers/acpi/acpica/exresop.c +++ b/drivers/acpi/acpica/exresop.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exstore.c b/drivers/acpi/acpica/exstore.c index 1624436ba4c..c0c8842dd34 100644 --- a/drivers/acpi/acpica/exstore.c +++ b/drivers/acpi/acpica/exstore.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exstoren.c b/drivers/acpi/acpica/exstoren.c index d4af684620c..a979017d56b 100644 --- a/drivers/acpi/acpica/exstoren.c +++ b/drivers/acpi/acpica/exstoren.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | *****************************************************************************/ | 7 | *****************************************************************************/ |
| 8 | 8 | ||
| 9 | /* | 9 | /* |
| 10 | * Copyright (C) 2000 - 2010, Intel Corp. | 10 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 11 | * All rights reserved. | 11 | * All rights reserved. |
| 12 | * | 12 | * |
| 13 | * Redistribution and use in source and binary forms, with or without | 13 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exstorob.c b/drivers/acpi/acpica/exstorob.c index e972b667b09..dc665cc554d 100644 --- a/drivers/acpi/acpica/exstorob.c +++ b/drivers/acpi/acpica/exstorob.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exsystem.c b/drivers/acpi/acpica/exsystem.c index 675aaa91a77..df66e7b686b 100644 --- a/drivers/acpi/acpica/exsystem.c +++ b/drivers/acpi/acpica/exsystem.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/exutils.c b/drivers/acpi/acpica/exutils.c index 4093522eed4..8ad93146dd3 100644 --- a/drivers/acpi/acpica/exutils.c +++ b/drivers/acpi/acpica/exutils.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/hwacpi.c b/drivers/acpi/acpica/hwacpi.c index b44274a0b62..fc380d3d45a 100644 --- a/drivers/acpi/acpica/hwacpi.c +++ b/drivers/acpi/acpica/hwacpi.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/hwgpe.c b/drivers/acpi/acpica/hwgpe.c index 85c3cbd4304..f610d88a66b 100644 --- a/drivers/acpi/acpica/hwgpe.c +++ b/drivers/acpi/acpica/hwgpe.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/hwpci.c b/drivers/acpi/acpica/hwpci.c index ad21c7d8bf4..050fd227951 100644 --- a/drivers/acpi/acpica/hwpci.c +++ b/drivers/acpi/acpica/hwpci.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/hwregs.c b/drivers/acpi/acpica/hwregs.c index 5d1273b660a..55accb7018b 100644 --- a/drivers/acpi/acpica/hwregs.c +++ b/drivers/acpi/acpica/hwregs.c | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | ******************************************************************************/ | 7 | ******************************************************************************/ |
| 8 | 8 | ||
| 9 | /* | 9 | /* |
| 10 | * Copyright (C) 2000 - 2010, Intel Corp. | 10 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 11 | * All rights reserved. | 11 | * All rights reserved. |
| 12 | * | 12 | * |
| 13 | * Redistribution and use in source and binary forms, with or without | 13 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/hwsleep.c b/drivers/acpi/acpica/hwsleep.c index 3796811276a..2ac28bbe882 100644 --- a/drivers/acpi/acpica/hwsleep.c +++ b/drivers/acpi/acpica/hwsleep.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/hwtimer.c b/drivers/acpi/acpica/hwtimer.c index 1ef8e0bb250..9c8eb71a12f 100644 --- a/drivers/acpi/acpica/hwtimer.c +++ b/drivers/acpi/acpica/hwtimer.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/hwvalid.c b/drivers/acpi/acpica/hwvalid.c index e1d9c777b21..5f160587465 100644 --- a/drivers/acpi/acpica/hwvalid.c +++ b/drivers/acpi/acpica/hwvalid.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/hwxface.c b/drivers/acpi/acpica/hwxface.c index 50cc3be7772..6f98d210e71 100644 --- a/drivers/acpi/acpica/hwxface.c +++ b/drivers/acpi/acpica/hwxface.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsaccess.c b/drivers/acpi/acpica/nsaccess.c index 0cd925be5fc..d93172fd15a 100644 --- a/drivers/acpi/acpica/nsaccess.c +++ b/drivers/acpi/acpica/nsaccess.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -163,9 +163,9 @@ acpi_status acpi_ns_root_initialize(void) | |||
| 163 | #else | 163 | #else |
| 164 | /* Mark this as a very SPECIAL method */ | 164 | /* Mark this as a very SPECIAL method */ |
| 165 | 165 | ||
| 166 | obj_desc->method.method_flags = | 166 | obj_desc->method.info_flags = |
| 167 | AML_METHOD_INTERNAL_ONLY; | 167 | ACPI_METHOD_INTERNAL_ONLY; |
| 168 | obj_desc->method.extra.implementation = | 168 | obj_desc->method.dispatch.implementation = |
| 169 | acpi_ut_osi_implementation; | 169 | acpi_ut_osi_implementation; |
| 170 | #endif | 170 | #endif |
| 171 | break; | 171 | break; |
diff --git a/drivers/acpi/acpica/nsalloc.c b/drivers/acpi/acpica/nsalloc.c index 1e5ff803d9a..1d0ef15d158 100644 --- a/drivers/acpi/acpica/nsalloc.c +++ b/drivers/acpi/acpica/nsalloc.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -234,8 +234,8 @@ void acpi_ns_install_node(struct acpi_walk_state *walk_state, struct acpi_namesp | |||
| 234 | * modified the namespace. This is used for cleanup when the | 234 | * modified the namespace. This is used for cleanup when the |
| 235 | * method exits. | 235 | * method exits. |
| 236 | */ | 236 | */ |
| 237 | walk_state->method_desc->method.flags |= | 237 | walk_state->method_desc->method.info_flags |= |
| 238 | AOPOBJ_MODIFIED_NAMESPACE; | 238 | ACPI_METHOD_MODIFIED_NAMESPACE; |
| 239 | } | 239 | } |
| 240 | } | 240 | } |
| 241 | 241 | ||
| @@ -341,6 +341,7 @@ void acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_node) | |||
| 341 | { | 341 | { |
| 342 | struct acpi_namespace_node *child_node = NULL; | 342 | struct acpi_namespace_node *child_node = NULL; |
| 343 | u32 level = 1; | 343 | u32 level = 1; |
| 344 | acpi_status status; | ||
| 344 | 345 | ||
| 345 | ACPI_FUNCTION_TRACE(ns_delete_namespace_subtree); | 346 | ACPI_FUNCTION_TRACE(ns_delete_namespace_subtree); |
| 346 | 347 | ||
| @@ -348,6 +349,13 @@ void acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_node) | |||
| 348 | return_VOID; | 349 | return_VOID; |
| 349 | } | 350 | } |
| 350 | 351 | ||
| 352 | /* Lock namespace for possible update */ | ||
| 353 | |||
| 354 | status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); | ||
| 355 | if (ACPI_FAILURE(status)) { | ||
| 356 | return_VOID; | ||
| 357 | } | ||
| 358 | |||
| 351 | /* | 359 | /* |
| 352 | * Traverse the tree of objects until we bubble back up | 360 | * Traverse the tree of objects until we bubble back up |
| 353 | * to where we started. | 361 | * to where we started. |
| @@ -397,6 +405,7 @@ void acpi_ns_delete_namespace_subtree(struct acpi_namespace_node *parent_node) | |||
| 397 | } | 405 | } |
| 398 | } | 406 | } |
| 399 | 407 | ||
| 408 | (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); | ||
| 400 | return_VOID; | 409 | return_VOID; |
| 401 | } | 410 | } |
| 402 | 411 | ||
diff --git a/drivers/acpi/acpica/nsdump.c b/drivers/acpi/acpica/nsdump.c index a54dc39e304..b683cc2ff9d 100644 --- a/drivers/acpi/acpica/nsdump.c +++ b/drivers/acpi/acpica/nsdump.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -624,9 +624,22 @@ acpi_ns_dump_objects(acpi_object_type type, | |||
| 624 | acpi_owner_id owner_id, acpi_handle start_handle) | 624 | acpi_owner_id owner_id, acpi_handle start_handle) |
| 625 | { | 625 | { |
| 626 | struct acpi_walk_info info; | 626 | struct acpi_walk_info info; |
| 627 | acpi_status status; | ||
| 627 | 628 | ||
| 628 | ACPI_FUNCTION_ENTRY(); | 629 | ACPI_FUNCTION_ENTRY(); |
| 629 | 630 | ||
| 631 | /* | ||
| 632 | * Just lock the entire namespace for the duration of the dump. | ||
| 633 | * We don't want any changes to the namespace during this time, | ||
| 634 | * especially the temporary nodes since we are going to display | ||
| 635 | * them also. | ||
| 636 | */ | ||
| 637 | status = acpi_ut_acquire_mutex(ACPI_MTX_NAMESPACE); | ||
| 638 | if (ACPI_FAILURE(status)) { | ||
| 639 | acpi_os_printf("Could not acquire namespace mutex\n"); | ||
| 640 | return; | ||
| 641 | } | ||
| 642 | |||
| 630 | info.debug_level = ACPI_LV_TABLES; | 643 | info.debug_level = ACPI_LV_TABLES; |
| 631 | info.owner_id = owner_id; | 644 | info.owner_id = owner_id; |
| 632 | info.display_type = display_type; | 645 | info.display_type = display_type; |
| @@ -636,6 +649,8 @@ acpi_ns_dump_objects(acpi_object_type type, | |||
| 636 | ACPI_NS_WALK_TEMP_NODES, | 649 | ACPI_NS_WALK_TEMP_NODES, |
| 637 | acpi_ns_dump_one_object, NULL, | 650 | acpi_ns_dump_one_object, NULL, |
| 638 | (void *)&info, NULL); | 651 | (void *)&info, NULL); |
| 652 | |||
| 653 | (void)acpi_ut_release_mutex(ACPI_MTX_NAMESPACE); | ||
| 639 | } | 654 | } |
| 640 | #endif /* ACPI_FUTURE_USAGE */ | 655 | #endif /* ACPI_FUTURE_USAGE */ |
| 641 | 656 | ||
diff --git a/drivers/acpi/acpica/nsdumpdv.c b/drivers/acpi/acpica/nsdumpdv.c index d2a97921e24..2ed294b7a4d 100644 --- a/drivers/acpi/acpica/nsdumpdv.c +++ b/drivers/acpi/acpica/nsdumpdv.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nseval.c b/drivers/acpi/acpica/nseval.c index f52829cc294..c1bd02b1a05 100644 --- a/drivers/acpi/acpica/nseval.c +++ b/drivers/acpi/acpica/nseval.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -389,7 +389,7 @@ acpi_ns_exec_module_code(union acpi_operand_object *method_obj, | |||
| 389 | * acpi_gbl_root_node->Object is NULL at PASS1. | 389 | * acpi_gbl_root_node->Object is NULL at PASS1. |
| 390 | */ | 390 | */ |
| 391 | if ((type == ACPI_TYPE_DEVICE) && parent_node->object) { | 391 | if ((type == ACPI_TYPE_DEVICE) && parent_node->object) { |
| 392 | method_obj->method.extra.handler = | 392 | method_obj->method.dispatch.handler = |
| 393 | parent_node->object->device.handler; | 393 | parent_node->object->device.handler; |
| 394 | } | 394 | } |
| 395 | 395 | ||
diff --git a/drivers/acpi/acpica/nsinit.c b/drivers/acpi/acpica/nsinit.c index 0cac7ec0d2e..fd7c6380e29 100644 --- a/drivers/acpi/acpica/nsinit.c +++ b/drivers/acpi/acpica/nsinit.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsload.c b/drivers/acpi/acpica/nsload.c index df18be94fef..5f7dc691c18 100644 --- a/drivers/acpi/acpica/nsload.c +++ b/drivers/acpi/acpica/nsload.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsnames.c b/drivers/acpi/acpica/nsnames.c index d3104af57e1..d5fa520c3de 100644 --- a/drivers/acpi/acpica/nsnames.c +++ b/drivers/acpi/acpica/nsnames.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsobject.c b/drivers/acpi/acpica/nsobject.c index 41a9213dd5a..3bb8bf105ea 100644 --- a/drivers/acpi/acpica/nsobject.c +++ b/drivers/acpi/acpica/nsobject.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | ******************************************************************************/ | 6 | ******************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsparse.c b/drivers/acpi/acpica/nsparse.c index 5808c89e9fa..b3234fa795b 100644 --- a/drivers/acpi/acpica/nsparse.c +++ b/drivers/acpi/acpica/nsparse.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nspredef.c b/drivers/acpi/acpica/nspredef.c index 7096bcda0c7..9fb03fa8ffd 100644 --- a/drivers/acpi/acpica/nspredef.c +++ b/drivers/acpi/acpica/nspredef.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsrepair.c b/drivers/acpi/acpica/nsrepair.c index d1c13669266..1d76ac85b5e 100644 --- a/drivers/acpi/acpica/nsrepair.c +++ b/drivers/acpi/acpica/nsrepair.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsrepair2.c b/drivers/acpi/acpica/nsrepair2.c index 4ef9f43ea92..973883babee 100644 --- a/drivers/acpi/acpica/nsrepair2.c +++ b/drivers/acpi/acpica/nsrepair2.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nssearch.c b/drivers/acpi/acpica/nssearch.c index 41102a84272..28b0d7a62b9 100644 --- a/drivers/acpi/acpica/nssearch.c +++ b/drivers/acpi/acpica/nssearch.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsutils.c b/drivers/acpi/acpica/nsutils.c index a7d6ad9c111..cb1b104a69a 100644 --- a/drivers/acpi/acpica/nsutils.c +++ b/drivers/acpi/acpica/nsutils.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nswalk.c b/drivers/acpi/acpica/nswalk.c index 2cd5be8fe10..345f0c3c6ad 100644 --- a/drivers/acpi/acpica/nswalk.c +++ b/drivers/acpi/acpica/nswalk.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsxfeval.c b/drivers/acpi/acpica/nsxfeval.c index ebef8a7fd70..c53f0040e49 100644 --- a/drivers/acpi/acpica/nsxfeval.c +++ b/drivers/acpi/acpica/nsxfeval.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | ******************************************************************************/ | 6 | ******************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/nsxfname.c b/drivers/acpi/acpica/nsxfname.c index b01e45a415e..3fd4526f3db 100644 --- a/drivers/acpi/acpica/nsxfname.c +++ b/drivers/acpi/acpica/nsxfname.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
| @@ -603,10 +603,9 @@ acpi_status acpi_install_method(u8 *buffer) | |||
| 603 | method_obj->method.param_count = (u8) | 603 | method_obj->method.param_count = (u8) |
| 604 | (method_flags & AML_METHOD_ARG_COUNT); | 604 | (method_flags & AML_METHOD_ARG_COUNT); |
| 605 | 605 | ||
| 606 | method_obj->method.method_flags = (u8) | ||
| 607 | (method_flags & ~AML_METHOD_ARG_COUNT); | ||
| 608 | |||
| 609 | if (method_flags & AML_METHOD_SERIALIZED) { | 606 | if (method_flags & AML_METHOD_SERIALIZED) { |
| 607 | method_obj->method.info_flags = ACPI_METHOD_SERIALIZED; | ||
| 608 | |||
| 610 | method_obj->method.sync_level = (u8) | 609 | method_obj->method.sync_level = (u8) |
| 611 | ((method_flags & AML_METHOD_SYNC_LEVEL) >> 4); | 610 | ((method_flags & AML_METHOD_SYNC_LEVEL) >> 4); |
| 612 | } | 611 | } |
diff --git a/drivers/acpi/acpica/nsxfobj.c b/drivers/acpi/acpica/nsxfobj.c index a1f04e9b803..db7660f8b86 100644 --- a/drivers/acpi/acpica/nsxfobj.c +++ b/drivers/acpi/acpica/nsxfobj.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | ******************************************************************************/ | 6 | ******************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/psargs.c b/drivers/acpi/acpica/psargs.c index 7df1a4c9527..e1fad0ee013 100644 --- a/drivers/acpi/acpica/psargs.c +++ b/drivers/acpi/acpica/psargs.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/psloop.c b/drivers/acpi/acpica/psloop.c index 2f2e7760938..01dd70d1de5 100644 --- a/drivers/acpi/acpica/psloop.c +++ b/drivers/acpi/acpica/psloop.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -655,7 +655,7 @@ acpi_ps_link_module_code(union acpi_parse_object *parent_op, | |||
| 655 | method_obj->method.aml_start = aml_start; | 655 | method_obj->method.aml_start = aml_start; |
| 656 | method_obj->method.aml_length = aml_length; | 656 | method_obj->method.aml_length = aml_length; |
| 657 | method_obj->method.owner_id = owner_id; | 657 | method_obj->method.owner_id = owner_id; |
| 658 | method_obj->method.flags |= AOPOBJ_MODULE_LEVEL; | 658 | method_obj->method.info_flags |= ACPI_METHOD_MODULE_LEVEL; |
| 659 | 659 | ||
| 660 | /* | 660 | /* |
| 661 | * Save the parent node in next_object. This is cheating, but we | 661 | * Save the parent node in next_object. This is cheating, but we |
diff --git a/drivers/acpi/acpica/psopcode.c b/drivers/acpi/acpica/psopcode.c index 2b0c3be2b1b..bed08de7528 100644 --- a/drivers/acpi/acpica/psopcode.c +++ b/drivers/acpi/acpica/psopcode.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/psparse.c b/drivers/acpi/acpica/psparse.c index 8d81542194d..9bb0cbd37b5 100644 --- a/drivers/acpi/acpica/psparse.c +++ b/drivers/acpi/acpica/psparse.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -55,7 +55,6 @@ | |||
| 55 | #include "acparser.h" | 55 | #include "acparser.h" |
| 56 | #include "acdispat.h" | 56 | #include "acdispat.h" |
| 57 | #include "amlcode.h" | 57 | #include "amlcode.h" |
| 58 | #include "acnamesp.h" | ||
| 59 | #include "acinterp.h" | 58 | #include "acinterp.h" |
| 60 | 59 | ||
| 61 | #define _COMPONENT ACPI_PARSER | 60 | #define _COMPONENT ACPI_PARSER |
| @@ -539,24 +538,16 @@ acpi_status acpi_ps_parse_aml(struct acpi_walk_state *walk_state) | |||
| 539 | /* Check for possible multi-thread reentrancy problem */ | 538 | /* Check for possible multi-thread reentrancy problem */ |
| 540 | 539 | ||
| 541 | if ((status == AE_ALREADY_EXISTS) && | 540 | if ((status == AE_ALREADY_EXISTS) && |
| 542 | (!walk_state->method_desc->method.mutex)) { | 541 | (!(walk_state->method_desc->method. |
| 543 | ACPI_INFO((AE_INFO, | 542 | info_flags & ACPI_METHOD_SERIALIZED))) { |
| 544 | "Marking method %4.4s as Serialized because of AE_ALREADY_EXISTS error", | ||
| 545 | walk_state->method_node->name. | ||
| 546 | ascii)); | ||
| 547 | |||
| 548 | /* | 543 | /* |
| 549 | * Method tried to create an object twice. The probable cause is | 544 | * Method is not serialized and tried to create an object |
| 550 | * that the method cannot handle reentrancy. | 545 | * twice. The probable cause is that the method cannot |
| 551 | * | 546 | * handle reentrancy. Mark as "pending serialized" now, and |
| 552 | * The method is marked not_serialized, but it tried to create | 547 | * then mark "serialized" when the last thread exits. |
| 553 | * a named object, causing the second thread entrance to fail. | ||
| 554 | * Workaround this problem by marking the method permanently | ||
| 555 | * as Serialized. | ||
| 556 | */ | 548 | */ |
| 557 | walk_state->method_desc->method.method_flags |= | 549 | walk_state->method_desc->method.info_flags |= |
| 558 | AML_METHOD_SERIALIZED; | 550 | ACPI_METHOD_SERIALIZED_PENDING; |
| 559 | walk_state->method_desc->method.sync_level = 0; | ||
| 560 | } | 551 | } |
| 561 | } | 552 | } |
| 562 | 553 | ||
diff --git a/drivers/acpi/acpica/psscope.c b/drivers/acpi/acpica/psscope.c index 40e2b279ea1..a5faa1323a0 100644 --- a/drivers/acpi/acpica/psscope.c +++ b/drivers/acpi/acpica/psscope.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/pstree.c b/drivers/acpi/acpica/pstree.c index d4b970c3630..f1464c03aa4 100644 --- a/drivers/acpi/acpica/pstree.c +++ b/drivers/acpi/acpica/pstree.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/psutils.c b/drivers/acpi/acpica/psutils.c index fe29eee5adb..7eda7850342 100644 --- a/drivers/acpi/acpica/psutils.c +++ b/drivers/acpi/acpica/psutils.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/pswalk.c b/drivers/acpi/acpica/pswalk.c index 8abb9629443..3312d6368bf 100644 --- a/drivers/acpi/acpica/pswalk.c +++ b/drivers/acpi/acpica/pswalk.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/psxface.c b/drivers/acpi/acpica/psxface.c index c42f067cff9..8086805d449 100644 --- a/drivers/acpi/acpica/psxface.c +++ b/drivers/acpi/acpica/psxface.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
| @@ -47,7 +47,6 @@ | |||
| 47 | #include "acdispat.h" | 47 | #include "acdispat.h" |
| 48 | #include "acinterp.h" | 48 | #include "acinterp.h" |
| 49 | #include "actables.h" | 49 | #include "actables.h" |
| 50 | #include "amlcode.h" | ||
| 51 | 50 | ||
| 52 | #define _COMPONENT ACPI_PARSER | 51 | #define _COMPONENT ACPI_PARSER |
| 53 | ACPI_MODULE_NAME("psxface") | 52 | ACPI_MODULE_NAME("psxface") |
| @@ -285,15 +284,15 @@ acpi_status acpi_ps_execute_method(struct acpi_evaluate_info *info) | |||
| 285 | goto cleanup; | 284 | goto cleanup; |
| 286 | } | 285 | } |
| 287 | 286 | ||
| 288 | if (info->obj_desc->method.flags & AOPOBJ_MODULE_LEVEL) { | 287 | if (info->obj_desc->method.info_flags & ACPI_METHOD_MODULE_LEVEL) { |
| 289 | walk_state->parse_flags |= ACPI_PARSE_MODULE_LEVEL; | 288 | walk_state->parse_flags |= ACPI_PARSE_MODULE_LEVEL; |
| 290 | } | 289 | } |
| 291 | 290 | ||
| 292 | /* Invoke an internal method if necessary */ | 291 | /* Invoke an internal method if necessary */ |
| 293 | 292 | ||
| 294 | if (info->obj_desc->method.method_flags & AML_METHOD_INTERNAL_ONLY) { | 293 | if (info->obj_desc->method.info_flags & ACPI_METHOD_INTERNAL_ONLY) { |
| 295 | status = | 294 | status = |
| 296 | info->obj_desc->method.extra.implementation(walk_state); | 295 | info->obj_desc->method.dispatch.implementation(walk_state); |
| 297 | info->return_object = walk_state->return_desc; | 296 | info->return_object = walk_state->return_desc; |
| 298 | 297 | ||
| 299 | /* Cleanup states */ | 298 | /* Cleanup states */ |
diff --git a/drivers/acpi/acpica/rsaddr.c b/drivers/acpi/acpica/rsaddr.c index 226c806ae98..9e66f907842 100644 --- a/drivers/acpi/acpica/rsaddr.c +++ b/drivers/acpi/acpica/rsaddr.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rscalc.c b/drivers/acpi/acpica/rscalc.c index d6ebf7ec622..3a8a89ec2ca 100644 --- a/drivers/acpi/acpica/rscalc.c +++ b/drivers/acpi/acpica/rscalc.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rscreate.c b/drivers/acpi/acpica/rscreate.c index c80a2eea3a0..4ce6e1147e8 100644 --- a/drivers/acpi/acpica/rscreate.c +++ b/drivers/acpi/acpica/rscreate.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rsdump.c b/drivers/acpi/acpica/rsdump.c index f859b0386fe..33db7520c74 100644 --- a/drivers/acpi/acpica/rsdump.c +++ b/drivers/acpi/acpica/rsdump.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rsinfo.c b/drivers/acpi/acpica/rsinfo.c index 1fd868b964f..f9ea60872aa 100644 --- a/drivers/acpi/acpica/rsinfo.c +++ b/drivers/acpi/acpica/rsinfo.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rsio.c b/drivers/acpi/acpica/rsio.c index 33bff17c0bb..0c7efef008b 100644 --- a/drivers/acpi/acpica/rsio.c +++ b/drivers/acpi/acpica/rsio.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rsirq.c b/drivers/acpi/acpica/rsirq.c index 545da40d7fa..50b8ad21116 100644 --- a/drivers/acpi/acpica/rsirq.c +++ b/drivers/acpi/acpica/rsirq.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rslist.c b/drivers/acpi/acpica/rslist.c index 7335f22aac2..1bfcef736c5 100644 --- a/drivers/acpi/acpica/rslist.c +++ b/drivers/acpi/acpica/rslist.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rsmemory.c b/drivers/acpi/acpica/rsmemory.c index 887b8ba8c43..7cc6d8625f1 100644 --- a/drivers/acpi/acpica/rsmemory.c +++ b/drivers/acpi/acpica/rsmemory.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rsmisc.c b/drivers/acpi/acpica/rsmisc.c index f8cd9e87d98..410264b22a2 100644 --- a/drivers/acpi/acpica/rsmisc.c +++ b/drivers/acpi/acpica/rsmisc.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rsutils.c b/drivers/acpi/acpica/rsutils.c index 491191e6cf6..231811e5693 100644 --- a/drivers/acpi/acpica/rsutils.c +++ b/drivers/acpi/acpica/rsutils.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/rsxface.c b/drivers/acpi/acpica/rsxface.c index 9f6a6e7e1c8..2ff657a28f2 100644 --- a/drivers/acpi/acpica/rsxface.c +++ b/drivers/acpi/acpica/rsxface.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/tbfadt.c b/drivers/acpi/acpica/tbfadt.c index d2ff4325c42..428d44e2d16 100644 --- a/drivers/acpi/acpica/tbfadt.c +++ b/drivers/acpi/acpica/tbfadt.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/tbfind.c b/drivers/acpi/acpica/tbfind.c index 989d5c86786..a55cb2bb5ab 100644 --- a/drivers/acpi/acpica/tbfind.c +++ b/drivers/acpi/acpica/tbfind.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/tbinstal.c b/drivers/acpi/acpica/tbinstal.c index 83d7af8d090..48db0944ce4 100644 --- a/drivers/acpi/acpica/tbinstal.c +++ b/drivers/acpi/acpica/tbinstal.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/tbutils.c b/drivers/acpi/acpica/tbutils.c index 34f9c2bc5e1..0f2d395feab 100644 --- a/drivers/acpi/acpica/tbutils.c +++ b/drivers/acpi/acpica/tbutils.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/tbxface.c b/drivers/acpi/acpica/tbxface.c index 4a8b9e6ea57..4b7085dfc68 100644 --- a/drivers/acpi/acpica/tbxface.c +++ b/drivers/acpi/acpica/tbxface.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/tbxfroot.c b/drivers/acpi/acpica/tbxfroot.c index fd2c07d1d3a..7eb6c6cc1ed 100644 --- a/drivers/acpi/acpica/tbxfroot.c +++ b/drivers/acpi/acpica/tbxfroot.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utalloc.c b/drivers/acpi/acpica/utalloc.c index 8f089628156..0a697351cf6 100644 --- a/drivers/acpi/acpica/utalloc.c +++ b/drivers/acpi/acpica/utalloc.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utcopy.c b/drivers/acpi/acpica/utcopy.c index 6fef83f04bc..aded299a2fa 100644 --- a/drivers/acpi/acpica/utcopy.c +++ b/drivers/acpi/acpica/utcopy.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utdebug.c b/drivers/acpi/acpica/utdebug.c index f21c486929a..a9bcd816dc2 100644 --- a/drivers/acpi/acpica/utdebug.c +++ b/drivers/acpi/acpica/utdebug.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utdelete.c b/drivers/acpi/acpica/utdelete.c index ed794cd033e..31f5a7832ef 100644 --- a/drivers/acpi/acpica/utdelete.c +++ b/drivers/acpi/acpica/utdelete.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/uteval.c b/drivers/acpi/acpica/uteval.c index 22f59ef604e..18f73c9d10b 100644 --- a/drivers/acpi/acpica/uteval.c +++ b/drivers/acpi/acpica/uteval.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utglobal.c b/drivers/acpi/acpica/utglobal.c index 508537f884a..97dd9bbf055 100644 --- a/drivers/acpi/acpica/utglobal.c +++ b/drivers/acpi/acpica/utglobal.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utids.c b/drivers/acpi/acpica/utids.c index d2906328535..b679ea69354 100644 --- a/drivers/acpi/acpica/utids.c +++ b/drivers/acpi/acpica/utids.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utinit.c b/drivers/acpi/acpica/utinit.c index c1b1c803ea9..191b6828cce 100644 --- a/drivers/acpi/acpica/utinit.c +++ b/drivers/acpi/acpica/utinit.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utlock.c b/drivers/acpi/acpica/utlock.c index b081cd46a15..f6bb75c6faf 100644 --- a/drivers/acpi/acpica/utlock.c +++ b/drivers/acpi/acpica/utlock.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utmath.c b/drivers/acpi/acpica/utmath.c index 49cf7b7fd81..ce481da9bb4 100644 --- a/drivers/acpi/acpica/utmath.c +++ b/drivers/acpi/acpica/utmath.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utmisc.c b/drivers/acpi/acpica/utmisc.c index c7d0e05ef5a..c33a852d4f4 100644 --- a/drivers/acpi/acpica/utmisc.c +++ b/drivers/acpi/acpica/utmisc.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utmutex.c b/drivers/acpi/acpica/utmutex.c index 199528ff7f1..a946c689f03 100644 --- a/drivers/acpi/acpica/utmutex.c +++ b/drivers/acpi/acpica/utmutex.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utobject.c b/drivers/acpi/acpica/utobject.c index fd1fa2749ea..188340a017b 100644 --- a/drivers/acpi/acpica/utobject.c +++ b/drivers/acpi/acpica/utobject.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utosi.c b/drivers/acpi/acpica/utosi.c index 18c59a85fdc..1fb10cb8f11 100644 --- a/drivers/acpi/acpica/utosi.c +++ b/drivers/acpi/acpica/utosi.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utresrc.c b/drivers/acpi/acpica/utresrc.c index 7965919000b..84e05184424 100644 --- a/drivers/acpi/acpica/utresrc.c +++ b/drivers/acpi/acpica/utresrc.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utstate.c b/drivers/acpi/acpica/utstate.c index d35d109b8da..30c21e1a936 100644 --- a/drivers/acpi/acpica/utstate.c +++ b/drivers/acpi/acpica/utstate.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utxface.c b/drivers/acpi/acpica/utxface.c index 1f484c9a688..98ad125e14f 100644 --- a/drivers/acpi/acpica/utxface.c +++ b/drivers/acpi/acpica/utxface.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/acpica/utxferror.c b/drivers/acpi/acpica/utxferror.c index 6f12e314fba..916ae097c43 100644 --- a/drivers/acpi/acpica/utxferror.c +++ b/drivers/acpi/acpica/utxferror.c | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | ******************************************************************************/ | 5 | ******************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c index 68bc227e7c4..ac1a599f514 100644 --- a/drivers/acpi/battery.c +++ b/drivers/acpi/battery.c | |||
| @@ -998,7 +998,6 @@ static int acpi_battery_resume(struct acpi_device *device) | |||
| 998 | if (!device) | 998 | if (!device) |
| 999 | return -EINVAL; | 999 | return -EINVAL; |
| 1000 | battery = acpi_driver_data(device); | 1000 | battery = acpi_driver_data(device); |
| 1001 | acpi_battery_refresh(battery); | ||
| 1002 | battery->update_time = 0; | 1001 | battery->update_time = 0; |
| 1003 | acpi_battery_update(battery); | 1002 | acpi_battery_update(battery); |
| 1004 | return 0; | 1003 | return 0; |
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 03e33707251..f6b9baa6a63 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c | |||
| @@ -928,6 +928,7 @@ static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring) | |||
| 928 | 928 | ||
| 929 | int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n) | 929 | int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n) |
| 930 | { | 930 | { |
| 931 | int reread = 0; | ||
| 931 | struct drm_device *dev = ring->dev; | 932 | struct drm_device *dev = ring->dev; |
| 932 | struct drm_i915_private *dev_priv = dev->dev_private; | 933 | struct drm_i915_private *dev_priv = dev->dev_private; |
| 933 | unsigned long end; | 934 | unsigned long end; |
| @@ -940,9 +941,8 @@ int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n) | |||
| 940 | * fallback to the slow and accurate path. | 941 | * fallback to the slow and accurate path. |
| 941 | */ | 942 | */ |
| 942 | head = intel_read_status_page(ring, 4); | 943 | head = intel_read_status_page(ring, 4); |
| 943 | if (head < ring->actual_head) | 944 | if (reread) |
| 944 | head = I915_READ_HEAD(ring); | 945 | head = I915_READ_HEAD(ring); |
| 945 | ring->actual_head = head; | ||
| 946 | ring->head = head & HEAD_ADDR; | 946 | ring->head = head & HEAD_ADDR; |
| 947 | ring->space = ring->head - (ring->tail + 8); | 947 | ring->space = ring->head - (ring->tail + 8); |
| 948 | if (ring->space < 0) | 948 | if (ring->space < 0) |
| @@ -961,6 +961,7 @@ int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n) | |||
| 961 | msleep(1); | 961 | msleep(1); |
| 962 | if (atomic_read(&dev_priv->mm.wedged)) | 962 | if (atomic_read(&dev_priv->mm.wedged)) |
| 963 | return -EAGAIN; | 963 | return -EAGAIN; |
| 964 | reread = 1; | ||
| 964 | } while (!time_after(jiffies, end)); | 965 | } while (!time_after(jiffies, end)); |
| 965 | trace_i915_ring_wait_end (dev); | 966 | trace_i915_ring_wait_end (dev); |
| 966 | return -EBUSY; | 967 | return -EBUSY; |
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h b/drivers/gpu/drm/i915/intel_ringbuffer.h index be9087e4c9b..5b0abfa881f 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.h +++ b/drivers/gpu/drm/i915/intel_ringbuffer.h | |||
| @@ -47,7 +47,6 @@ struct intel_ring_buffer { | |||
| 47 | struct drm_device *dev; | 47 | struct drm_device *dev; |
| 48 | struct drm_i915_gem_object *obj; | 48 | struct drm_i915_gem_object *obj; |
| 49 | 49 | ||
| 50 | u32 actual_head; | ||
| 51 | u32 head; | 50 | u32 head; |
| 52 | u32 tail; | 51 | u32 tail; |
| 53 | int space; | 52 | int space; |
diff --git a/drivers/lguest/page_tables.c b/drivers/lguest/page_tables.c index 04b22128a47..d21578ee95d 100644 --- a/drivers/lguest/page_tables.c +++ b/drivers/lguest/page_tables.c | |||
| @@ -1137,7 +1137,7 @@ void free_guest_pagetable(struct lguest *lg) | |||
| 1137 | */ | 1137 | */ |
| 1138 | void map_switcher_in_guest(struct lg_cpu *cpu, struct lguest_pages *pages) | 1138 | void map_switcher_in_guest(struct lg_cpu *cpu, struct lguest_pages *pages) |
| 1139 | { | 1139 | { |
| 1140 | pte_t *switcher_pte_page = __get_cpu_var(switcher_pte_pages); | 1140 | pte_t *switcher_pte_page = __this_cpu_read(switcher_pte_pages); |
| 1141 | pte_t regs_pte; | 1141 | pte_t regs_pte; |
| 1142 | 1142 | ||
| 1143 | #ifdef CONFIG_X86_PAE | 1143 | #ifdef CONFIG_X86_PAE |
diff --git a/drivers/lguest/x86/core.c b/drivers/lguest/x86/core.c index b4eb675a807..9f1659c3d1f 100644 --- a/drivers/lguest/x86/core.c +++ b/drivers/lguest/x86/core.c | |||
| @@ -90,8 +90,8 @@ static void copy_in_guest_info(struct lg_cpu *cpu, struct lguest_pages *pages) | |||
| 90 | * meanwhile). If that's not the case, we pretend everything in the | 90 | * meanwhile). If that's not the case, we pretend everything in the |
| 91 | * Guest has changed. | 91 | * Guest has changed. |
| 92 | */ | 92 | */ |
| 93 | if (__get_cpu_var(lg_last_cpu) != cpu || cpu->last_pages != pages) { | 93 | if (__this_cpu_read(lg_last_cpu) != cpu || cpu->last_pages != pages) { |
| 94 | __get_cpu_var(lg_last_cpu) = cpu; | 94 | __this_cpu_write(lg_last_cpu, cpu); |
| 95 | cpu->last_pages = pages; | 95 | cpu->last_pages = pages; |
| 96 | cpu->changed = CHANGED_ALL; | 96 | cpu->changed = CHANGED_ALL; |
| 97 | } | 97 | } |
diff --git a/drivers/net/bnx2x/bnx2x.h b/drivers/net/bnx2x/bnx2x.h index a6cd335c943..8e4183717d9 100644 --- a/drivers/net/bnx2x/bnx2x.h +++ b/drivers/net/bnx2x/bnx2x.h | |||
| @@ -22,8 +22,8 @@ | |||
| 22 | * (you will need to reboot afterwards) */ | 22 | * (you will need to reboot afterwards) */ |
| 23 | /* #define BNX2X_STOP_ON_ERROR */ | 23 | /* #define BNX2X_STOP_ON_ERROR */ |
| 24 | 24 | ||
| 25 | #define DRV_MODULE_VERSION "1.62.00-3" | 25 | #define DRV_MODULE_VERSION "1.62.00-4" |
| 26 | #define DRV_MODULE_RELDATE "2010/12/21" | 26 | #define DRV_MODULE_RELDATE "2011/01/18" |
| 27 | #define BNX2X_BC_VER 0x040200 | 27 | #define BNX2X_BC_VER 0x040200 |
| 28 | 28 | ||
| 29 | #define BNX2X_MULTI_QUEUE | 29 | #define BNX2X_MULTI_QUEUE |
diff --git a/drivers/net/bnx2x/bnx2x_hsi.h b/drivers/net/bnx2x/bnx2x_hsi.h index 6238d4f6398..548f5631c0d 100644 --- a/drivers/net/bnx2x/bnx2x_hsi.h +++ b/drivers/net/bnx2x/bnx2x_hsi.h | |||
| @@ -352,6 +352,10 @@ struct port_hw_cfg { /* port 0: 0x12c port 1: 0x2bc */ | |||
| 352 | #define PORT_HW_CFG_LANE_SWAP_CFG_31203120 0x0000d8d8 | 352 | #define PORT_HW_CFG_LANE_SWAP_CFG_31203120 0x0000d8d8 |
| 353 | /* forced only */ | 353 | /* forced only */ |
| 354 | #define PORT_HW_CFG_LANE_SWAP_CFG_32103210 0x0000e4e4 | 354 | #define PORT_HW_CFG_LANE_SWAP_CFG_32103210 0x0000e4e4 |
| 355 | /* Indicate whether to swap the external phy polarity */ | ||
| 356 | #define PORT_HW_CFG_SWAP_PHY_POLARITY_MASK 0x00010000 | ||
| 357 | #define PORT_HW_CFG_SWAP_PHY_POLARITY_DISABLED 0x00000000 | ||
| 358 | #define PORT_HW_CFG_SWAP_PHY_POLARITY_ENABLED 0x00010000 | ||
| 355 | 359 | ||
| 356 | u32 external_phy_config; | 360 | u32 external_phy_config; |
| 357 | #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_MASK 0xff000000 | 361 | #define PORT_HW_CFG_SERDES_EXT_PHY_TYPE_MASK 0xff000000 |
diff --git a/drivers/net/bnx2x/bnx2x_link.c b/drivers/net/bnx2x/bnx2x_link.c index 43b0de24f39..7160ec51093 100644 --- a/drivers/net/bnx2x/bnx2x_link.c +++ b/drivers/net/bnx2x/bnx2x_link.c | |||
| @@ -1573,7 +1573,7 @@ static void bnx2x_set_aer_mmd_xgxs(struct link_params *params, | |||
| 1573 | 1573 | ||
| 1574 | offset = phy->addr + ser_lane; | 1574 | offset = phy->addr + ser_lane; |
| 1575 | if (CHIP_IS_E2(bp)) | 1575 | if (CHIP_IS_E2(bp)) |
| 1576 | aer_val = 0x2800 + offset - 1; | 1576 | aer_val = 0x3800 + offset - 1; |
| 1577 | else | 1577 | else |
| 1578 | aer_val = 0x3800 + offset; | 1578 | aer_val = 0x3800 + offset; |
| 1579 | CL45_WR_OVER_CL22(bp, phy, | 1579 | CL45_WR_OVER_CL22(bp, phy, |
| @@ -3166,7 +3166,23 @@ u8 bnx2x_set_led(struct link_params *params, | |||
| 3166 | if (!vars->link_up) | 3166 | if (!vars->link_up) |
| 3167 | break; | 3167 | break; |
| 3168 | case LED_MODE_ON: | 3168 | case LED_MODE_ON: |
| 3169 | if (SINGLE_MEDIA_DIRECT(params)) { | 3169 | if (params->phy[EXT_PHY1].type == |
| 3170 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8727 && | ||
| 3171 | CHIP_IS_E2(bp) && params->num_phys == 2) { | ||
| 3172 | /** | ||
| 3173 | * This is a work-around for E2+8727 Configurations | ||
| 3174 | */ | ||
| 3175 | if (mode == LED_MODE_ON || | ||
| 3176 | speed == SPEED_10000){ | ||
| 3177 | REG_WR(bp, NIG_REG_LED_MODE_P0 + port*4, 0); | ||
| 3178 | REG_WR(bp, NIG_REG_LED_10G_P0 + port*4, 1); | ||
| 3179 | |||
| 3180 | tmp = EMAC_RD(bp, EMAC_REG_EMAC_LED); | ||
| 3181 | EMAC_WR(bp, EMAC_REG_EMAC_LED, | ||
| 3182 | (tmp | EMAC_LED_OVERRIDE)); | ||
| 3183 | return rc; | ||
| 3184 | } | ||
| 3185 | } else if (SINGLE_MEDIA_DIRECT(params)) { | ||
| 3170 | /** | 3186 | /** |
| 3171 | * This is a work-around for HW issue found when link | 3187 | * This is a work-around for HW issue found when link |
| 3172 | * is up in CL73 | 3188 | * is up in CL73 |
| @@ -3854,11 +3870,14 @@ static void bnx2x_8073_resolve_fc(struct bnx2x_phy *phy, | |||
| 3854 | pause_result); | 3870 | pause_result); |
| 3855 | } | 3871 | } |
| 3856 | } | 3872 | } |
| 3857 | 3873 | static u8 bnx2x_8073_8727_external_rom_boot(struct bnx2x *bp, | |
| 3858 | static void bnx2x_8073_8727_external_rom_boot(struct bnx2x *bp, | ||
| 3859 | struct bnx2x_phy *phy, | 3874 | struct bnx2x_phy *phy, |
| 3860 | u8 port) | 3875 | u8 port) |
| 3861 | { | 3876 | { |
| 3877 | u32 count = 0; | ||
| 3878 | u16 fw_ver1, fw_msgout; | ||
| 3879 | u8 rc = 0; | ||
| 3880 | |||
| 3862 | /* Boot port from external ROM */ | 3881 | /* Boot port from external ROM */ |
| 3863 | /* EDC grst */ | 3882 | /* EDC grst */ |
| 3864 | bnx2x_cl45_write(bp, phy, | 3883 | bnx2x_cl45_write(bp, phy, |
| @@ -3888,14 +3907,45 @@ static void bnx2x_8073_8727_external_rom_boot(struct bnx2x *bp, | |||
| 3888 | MDIO_PMA_REG_GEN_CTRL, | 3907 | MDIO_PMA_REG_GEN_CTRL, |
| 3889 | MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP); | 3908 | MDIO_PMA_REG_GEN_CTRL_ROM_RESET_INTERNAL_MP); |
| 3890 | 3909 | ||
| 3891 | /* wait for 120ms for code download via SPI port */ | 3910 | /* Delay 100ms per the PHY specifications */ |
| 3892 | msleep(120); | 3911 | msleep(100); |
| 3912 | |||
| 3913 | /* 8073 sometimes taking longer to download */ | ||
| 3914 | do { | ||
| 3915 | count++; | ||
| 3916 | if (count > 300) { | ||
| 3917 | DP(NETIF_MSG_LINK, | ||
| 3918 | "bnx2x_8073_8727_external_rom_boot port %x:" | ||
| 3919 | "Download failed. fw version = 0x%x\n", | ||
| 3920 | port, fw_ver1); | ||
| 3921 | rc = -EINVAL; | ||
| 3922 | break; | ||
| 3923 | } | ||
| 3924 | |||
| 3925 | bnx2x_cl45_read(bp, phy, | ||
| 3926 | MDIO_PMA_DEVAD, | ||
| 3927 | MDIO_PMA_REG_ROM_VER1, &fw_ver1); | ||
| 3928 | bnx2x_cl45_read(bp, phy, | ||
| 3929 | MDIO_PMA_DEVAD, | ||
| 3930 | MDIO_PMA_REG_M8051_MSGOUT_REG, &fw_msgout); | ||
| 3931 | |||
| 3932 | msleep(1); | ||
| 3933 | } while (fw_ver1 == 0 || fw_ver1 == 0x4321 || | ||
| 3934 | ((fw_msgout & 0xff) != 0x03 && (phy->type == | ||
| 3935 | PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8073))); | ||
| 3893 | 3936 | ||
| 3894 | /* Clear ser_boot_ctl bit */ | 3937 | /* Clear ser_boot_ctl bit */ |
| 3895 | bnx2x_cl45_write(bp, phy, | 3938 | bnx2x_cl45_write(bp, phy, |
| 3896 | MDIO_PMA_DEVAD, | 3939 | MDIO_PMA_DEVAD, |
| 3897 | MDIO_PMA_REG_MISC_CTRL1, 0x0000); | 3940 | MDIO_PMA_REG_MISC_CTRL1, 0x0000); |
| 3898 | bnx2x_save_bcm_spirom_ver(bp, phy, port); | 3941 | bnx2x_save_bcm_spirom_ver(bp, phy, port); |
| 3942 | |||
| 3943 | DP(NETIF_MSG_LINK, | ||
| 3944 | "bnx2x_8073_8727_external_rom_boot port %x:" | ||
| 3945 | "Download complete. fw version = 0x%x\n", | ||
| 3946 | port, fw_ver1); | ||
| 3947 | |||
| 3948 | return rc; | ||
| 3899 | } | 3949 | } |
| 3900 | 3950 | ||
| 3901 | static void bnx2x_8073_set_xaui_low_power_mode(struct bnx2x *bp, | 3951 | static void bnx2x_8073_set_xaui_low_power_mode(struct bnx2x *bp, |
| @@ -4108,6 +4158,25 @@ static u8 bnx2x_8073_config_init(struct bnx2x_phy *phy, | |||
| 4108 | 4158 | ||
| 4109 | DP(NETIF_MSG_LINK, "Before rom RX_ALARM(port1): 0x%x\n", tmp1); | 4159 | DP(NETIF_MSG_LINK, "Before rom RX_ALARM(port1): 0x%x\n", tmp1); |
| 4110 | 4160 | ||
| 4161 | /** | ||
| 4162 | * If this is forced speed, set to KR or KX (all other are not | ||
| 4163 | * supported) | ||
| 4164 | */ | ||
| 4165 | /* Swap polarity if required - Must be done only in non-1G mode */ | ||
| 4166 | if (params->lane_config & PORT_HW_CFG_SWAP_PHY_POLARITY_ENABLED) { | ||
| 4167 | /* Configure the 8073 to swap _P and _N of the KR lines */ | ||
| 4168 | DP(NETIF_MSG_LINK, "Swapping polarity for the 8073\n"); | ||
| 4169 | /* 10G Rx/Tx and 1G Tx signal polarity swap */ | ||
| 4170 | bnx2x_cl45_read(bp, phy, | ||
| 4171 | MDIO_PMA_DEVAD, | ||
| 4172 | MDIO_PMA_REG_8073_OPT_DIGITAL_CTRL, &val); | ||
| 4173 | bnx2x_cl45_write(bp, phy, | ||
| 4174 | MDIO_PMA_DEVAD, | ||
| 4175 | MDIO_PMA_REG_8073_OPT_DIGITAL_CTRL, | ||
| 4176 | (val | (3<<9))); | ||
| 4177 | } | ||
| 4178 | |||
| 4179 | |||
| 4111 | /* Enable CL37 BAM */ | 4180 | /* Enable CL37 BAM */ |
| 4112 | if (REG_RD(bp, params->shmem_base + | 4181 | if (REG_RD(bp, params->shmem_base + |
| 4113 | offsetof(struct shmem_region, dev_info. | 4182 | offsetof(struct shmem_region, dev_info. |
| @@ -4314,8 +4383,32 @@ static u8 bnx2x_8073_read_status(struct bnx2x_phy *phy, | |||
| 4314 | } | 4383 | } |
| 4315 | 4384 | ||
| 4316 | if (link_up) { | 4385 | if (link_up) { |
| 4386 | /* Swap polarity if required */ | ||
| 4387 | if (params->lane_config & | ||
| 4388 | PORT_HW_CFG_SWAP_PHY_POLARITY_ENABLED) { | ||
| 4389 | /* Configure the 8073 to swap P and N of the KR lines */ | ||
| 4390 | bnx2x_cl45_read(bp, phy, | ||
| 4391 | MDIO_XS_DEVAD, | ||
| 4392 | MDIO_XS_REG_8073_RX_CTRL_PCIE, &val1); | ||
| 4393 | /** | ||
| 4394 | * Set bit 3 to invert Rx in 1G mode and clear this bit | ||
| 4395 | * when it`s in 10G mode. | ||
| 4396 | */ | ||
| 4397 | if (vars->line_speed == SPEED_1000) { | ||
| 4398 | DP(NETIF_MSG_LINK, "Swapping 1G polarity for" | ||
| 4399 | "the 8073\n"); | ||
| 4400 | val1 |= (1<<3); | ||
| 4401 | } else | ||
| 4402 | val1 &= ~(1<<3); | ||
| 4403 | |||
| 4404 | bnx2x_cl45_write(bp, phy, | ||
| 4405 | MDIO_XS_DEVAD, | ||
| 4406 | MDIO_XS_REG_8073_RX_CTRL_PCIE, | ||
| 4407 | val1); | ||
| 4408 | } | ||
| 4317 | bnx2x_ext_phy_10G_an_resolve(bp, phy, vars); | 4409 | bnx2x_ext_phy_10G_an_resolve(bp, phy, vars); |
| 4318 | bnx2x_8073_resolve_fc(phy, params, vars); | 4410 | bnx2x_8073_resolve_fc(phy, params, vars); |
| 4411 | vars->duplex = DUPLEX_FULL; | ||
| 4319 | } | 4412 | } |
| 4320 | return link_up; | 4413 | return link_up; |
| 4321 | } | 4414 | } |
| @@ -5062,6 +5155,7 @@ static u8 bnx2x_8706_8726_read_status(struct bnx2x_phy *phy, | |||
| 5062 | else | 5155 | else |
| 5063 | vars->line_speed = SPEED_10000; | 5156 | vars->line_speed = SPEED_10000; |
| 5064 | bnx2x_ext_phy_resolve_fc(phy, params, vars); | 5157 | bnx2x_ext_phy_resolve_fc(phy, params, vars); |
| 5158 | vars->duplex = DUPLEX_FULL; | ||
| 5065 | } | 5159 | } |
| 5066 | return link_up; | 5160 | return link_up; |
| 5067 | } | 5161 | } |
| @@ -5758,8 +5852,11 @@ static u8 bnx2x_8727_read_status(struct bnx2x_phy *phy, | |||
| 5758 | DP(NETIF_MSG_LINK, "port %x: External link is down\n", | 5852 | DP(NETIF_MSG_LINK, "port %x: External link is down\n", |
| 5759 | params->port); | 5853 | params->port); |
| 5760 | } | 5854 | } |
| 5761 | if (link_up) | 5855 | if (link_up) { |
| 5762 | bnx2x_ext_phy_resolve_fc(phy, params, vars); | 5856 | bnx2x_ext_phy_resolve_fc(phy, params, vars); |
| 5857 | vars->duplex = DUPLEX_FULL; | ||
| 5858 | DP(NETIF_MSG_LINK, "duplex = 0x%x\n", vars->duplex); | ||
| 5859 | } | ||
| 5763 | 5860 | ||
| 5764 | if ((DUAL_MEDIA(params)) && | 5861 | if ((DUAL_MEDIA(params)) && |
| 5765 | (phy->req_line_speed == SPEED_1000)) { | 5862 | (phy->req_line_speed == SPEED_1000)) { |
| @@ -5875,10 +5972,26 @@ static void bnx2x_848xx_set_led(struct bnx2x *bp, | |||
| 5875 | MDIO_PMA_REG_8481_LED2_MASK, | 5972 | MDIO_PMA_REG_8481_LED2_MASK, |
| 5876 | 0x18); | 5973 | 0x18); |
| 5877 | 5974 | ||
| 5975 | /* Select activity source by Tx and Rx, as suggested by PHY AE */ | ||
| 5878 | bnx2x_cl45_write(bp, phy, | 5976 | bnx2x_cl45_write(bp, phy, |
| 5879 | MDIO_PMA_DEVAD, | 5977 | MDIO_PMA_DEVAD, |
| 5880 | MDIO_PMA_REG_8481_LED3_MASK, | 5978 | MDIO_PMA_REG_8481_LED3_MASK, |
| 5881 | 0x0040); | 5979 | 0x0006); |
| 5980 | |||
| 5981 | /* Select the closest activity blink rate to that in 10/100/1000 */ | ||
| 5982 | bnx2x_cl45_write(bp, phy, | ||
| 5983 | MDIO_PMA_DEVAD, | ||
| 5984 | MDIO_PMA_REG_8481_LED3_BLINK, | ||
| 5985 | 0); | ||
| 5986 | |||
| 5987 | bnx2x_cl45_read(bp, phy, | ||
| 5988 | MDIO_PMA_DEVAD, | ||
| 5989 | MDIO_PMA_REG_84823_CTL_LED_CTL_1, &val); | ||
| 5990 | val |= MDIO_PMA_REG_84823_LED3_STRETCH_EN; /* stretch_en for LED3*/ | ||
| 5991 | |||
| 5992 | bnx2x_cl45_write(bp, phy, | ||
| 5993 | MDIO_PMA_DEVAD, | ||
| 5994 | MDIO_PMA_REG_84823_CTL_LED_CTL_1, val); | ||
| 5882 | 5995 | ||
| 5883 | /* 'Interrupt Mask' */ | 5996 | /* 'Interrupt Mask' */ |
| 5884 | bnx2x_cl45_write(bp, phy, | 5997 | bnx2x_cl45_write(bp, phy, |
| @@ -6126,6 +6239,7 @@ static u8 bnx2x_848xx_read_status(struct bnx2x_phy *phy, | |||
| 6126 | /* Check link 10G */ | 6239 | /* Check link 10G */ |
| 6127 | if (val2 & (1<<11)) { | 6240 | if (val2 & (1<<11)) { |
| 6128 | vars->line_speed = SPEED_10000; | 6241 | vars->line_speed = SPEED_10000; |
| 6242 | vars->duplex = DUPLEX_FULL; | ||
| 6129 | link_up = 1; | 6243 | link_up = 1; |
| 6130 | bnx2x_ext_phy_10G_an_resolve(bp, phy, vars); | 6244 | bnx2x_ext_phy_10G_an_resolve(bp, phy, vars); |
| 6131 | } else { /* Check Legacy speed link */ | 6245 | } else { /* Check Legacy speed link */ |
| @@ -6489,6 +6603,7 @@ static u8 bnx2x_7101_read_status(struct bnx2x_phy *phy, | |||
| 6489 | MDIO_AN_DEVAD, MDIO_AN_REG_MASTER_STATUS, | 6603 | MDIO_AN_DEVAD, MDIO_AN_REG_MASTER_STATUS, |
| 6490 | &val2); | 6604 | &val2); |
| 6491 | vars->line_speed = SPEED_10000; | 6605 | vars->line_speed = SPEED_10000; |
| 6606 | vars->duplex = DUPLEX_FULL; | ||
| 6492 | DP(NETIF_MSG_LINK, "SFX7101 AN status 0x%x->Master=%x\n", | 6607 | DP(NETIF_MSG_LINK, "SFX7101 AN status 0x%x->Master=%x\n", |
| 6493 | val2, (val2 & (1<<14))); | 6608 | val2, (val2 & (1<<14))); |
| 6494 | bnx2x_ext_phy_10G_an_resolve(bp, phy, vars); | 6609 | bnx2x_ext_phy_10G_an_resolve(bp, phy, vars); |
| @@ -7663,7 +7778,6 @@ static u8 bnx2x_8073_common_init_phy(struct bnx2x *bp, | |||
| 7663 | 7778 | ||
| 7664 | /* PART2 - Download firmware to both phys */ | 7779 | /* PART2 - Download firmware to both phys */ |
| 7665 | for (port = PORT_MAX - 1; port >= PORT_0; port--) { | 7780 | for (port = PORT_MAX - 1; port >= PORT_0; port--) { |
| 7666 | u16 fw_ver1; | ||
| 7667 | if (CHIP_IS_E2(bp)) | 7781 | if (CHIP_IS_E2(bp)) |
| 7668 | port_of_path = 0; | 7782 | port_of_path = 0; |
| 7669 | else | 7783 | else |
| @@ -7671,19 +7785,9 @@ static u8 bnx2x_8073_common_init_phy(struct bnx2x *bp, | |||
| 7671 | 7785 | ||
| 7672 | DP(NETIF_MSG_LINK, "Loading spirom for phy address 0x%x\n", | 7786 | DP(NETIF_MSG_LINK, "Loading spirom for phy address 0x%x\n", |
| 7673 | phy_blk[port]->addr); | 7787 | phy_blk[port]->addr); |
| 7674 | bnx2x_8073_8727_external_rom_boot(bp, phy_blk[port], | 7788 | if (bnx2x_8073_8727_external_rom_boot(bp, phy_blk[port], |
| 7675 | port_of_path); | 7789 | port_of_path)) |
| 7676 | |||
| 7677 | bnx2x_cl45_read(bp, phy_blk[port], | ||
| 7678 | MDIO_PMA_DEVAD, | ||
| 7679 | MDIO_PMA_REG_ROM_VER1, &fw_ver1); | ||
| 7680 | if (fw_ver1 == 0 || fw_ver1 == 0x4321) { | ||
| 7681 | DP(NETIF_MSG_LINK, | ||
| 7682 | "bnx2x_8073_common_init_phy port %x:" | ||
| 7683 | "Download failed. fw version = 0x%x\n", | ||
| 7684 | port, fw_ver1); | ||
| 7685 | return -EINVAL; | 7790 | return -EINVAL; |
| 7686 | } | ||
| 7687 | 7791 | ||
| 7688 | /* Only set bit 10 = 1 (Tx power down) */ | 7792 | /* Only set bit 10 = 1 (Tx power down) */ |
| 7689 | bnx2x_cl45_read(bp, phy_blk[port], | 7793 | bnx2x_cl45_read(bp, phy_blk[port], |
| @@ -7848,27 +7952,17 @@ static u8 bnx2x_8727_common_init_phy(struct bnx2x *bp, | |||
| 7848 | } | 7952 | } |
| 7849 | /* PART2 - Download firmware to both phys */ | 7953 | /* PART2 - Download firmware to both phys */ |
| 7850 | for (port = PORT_MAX - 1; port >= PORT_0; port--) { | 7954 | for (port = PORT_MAX - 1; port >= PORT_0; port--) { |
| 7851 | u16 fw_ver1; | ||
| 7852 | if (CHIP_IS_E2(bp)) | 7955 | if (CHIP_IS_E2(bp)) |
| 7853 | port_of_path = 0; | 7956 | port_of_path = 0; |
| 7854 | else | 7957 | else |
| 7855 | port_of_path = port; | 7958 | port_of_path = port; |
| 7856 | DP(NETIF_MSG_LINK, "Loading spirom for phy address 0x%x\n", | 7959 | DP(NETIF_MSG_LINK, "Loading spirom for phy address 0x%x\n", |
| 7857 | phy_blk[port]->addr); | 7960 | phy_blk[port]->addr); |
| 7858 | bnx2x_8073_8727_external_rom_boot(bp, phy_blk[port], | 7961 | if (bnx2x_8073_8727_external_rom_boot(bp, phy_blk[port], |
| 7859 | port_of_path); | 7962 | port_of_path)) |
| 7860 | bnx2x_cl45_read(bp, phy_blk[port], | ||
| 7861 | MDIO_PMA_DEVAD, | ||
| 7862 | MDIO_PMA_REG_ROM_VER1, &fw_ver1); | ||
| 7863 | if (fw_ver1 == 0 || fw_ver1 == 0x4321) { | ||
| 7864 | DP(NETIF_MSG_LINK, | ||
| 7865 | "bnx2x_8727_common_init_phy port %x:" | ||
| 7866 | "Download failed. fw version = 0x%x\n", | ||
| 7867 | port, fw_ver1); | ||
| 7868 | return -EINVAL; | 7963 | return -EINVAL; |
| 7869 | } | ||
| 7870 | } | ||
| 7871 | 7964 | ||
| 7965 | } | ||
| 7872 | return 0; | 7966 | return 0; |
| 7873 | } | 7967 | } |
| 7874 | 7968 | ||
| @@ -7916,6 +8010,7 @@ u8 bnx2x_common_init_phy(struct bnx2x *bp, u32 shmem_base_path[], | |||
| 7916 | u32 shmem2_base_path[], u32 chip_id) | 8010 | u32 shmem2_base_path[], u32 chip_id) |
| 7917 | { | 8011 | { |
| 7918 | u8 rc = 0; | 8012 | u8 rc = 0; |
| 8013 | u32 phy_ver; | ||
| 7919 | u8 phy_index; | 8014 | u8 phy_index; |
| 7920 | u32 ext_phy_type, ext_phy_config; | 8015 | u32 ext_phy_type, ext_phy_config; |
| 7921 | DP(NETIF_MSG_LINK, "Begin common phy init\n"); | 8016 | DP(NETIF_MSG_LINK, "Begin common phy init\n"); |
| @@ -7923,6 +8018,16 @@ u8 bnx2x_common_init_phy(struct bnx2x *bp, u32 shmem_base_path[], | |||
| 7923 | if (CHIP_REV_IS_EMUL(bp)) | 8018 | if (CHIP_REV_IS_EMUL(bp)) |
| 7924 | return 0; | 8019 | return 0; |
| 7925 | 8020 | ||
| 8021 | /* Check if common init was already done */ | ||
| 8022 | phy_ver = REG_RD(bp, shmem_base_path[0] + | ||
| 8023 | offsetof(struct shmem_region, | ||
| 8024 | port_mb[PORT_0].ext_phy_fw_version)); | ||
| 8025 | if (phy_ver) { | ||
| 8026 | DP(NETIF_MSG_LINK, "Not doing common init; phy ver is 0x%x\n", | ||
| 8027 | phy_ver); | ||
| 8028 | return 0; | ||
| 8029 | } | ||
| 8030 | |||
| 7926 | /* Read the ext_phy_type for arbitrary port(0) */ | 8031 | /* Read the ext_phy_type for arbitrary port(0) */ |
| 7927 | for (phy_index = EXT_PHY1; phy_index < MAX_PHYS; | 8032 | for (phy_index = EXT_PHY1; phy_index < MAX_PHYS; |
| 7928 | phy_index++) { | 8033 | phy_index++) { |
diff --git a/drivers/net/bnx2x/bnx2x_reg.h b/drivers/net/bnx2x/bnx2x_reg.h index c939683e3d6..e01330bb36c 100644 --- a/drivers/net/bnx2x/bnx2x_reg.h +++ b/drivers/net/bnx2x/bnx2x_reg.h | |||
| @@ -6194,7 +6194,11 @@ Theotherbitsarereservedandshouldbezero*/ | |||
| 6194 | #define MDIO_CTL_REG_84823_MEDIA_PRIORITY_COPPER 0x0000 | 6194 | #define MDIO_CTL_REG_84823_MEDIA_PRIORITY_COPPER 0x0000 |
| 6195 | #define MDIO_CTL_REG_84823_MEDIA_PRIORITY_FIBER 0x0100 | 6195 | #define MDIO_CTL_REG_84823_MEDIA_PRIORITY_FIBER 0x0100 |
| 6196 | #define MDIO_CTL_REG_84823_MEDIA_FIBER_1G 0x1000 | 6196 | #define MDIO_CTL_REG_84823_MEDIA_FIBER_1G 0x1000 |
| 6197 | #define MDIO_CTL_REG_84823_USER_CTRL_REG 0x4005 | ||
| 6198 | #define MDIO_CTL_REG_84823_USER_CTRL_CMS 0x0080 | ||
| 6197 | 6199 | ||
| 6200 | #define MDIO_PMA_REG_84823_CTL_LED_CTL_1 0xa8e3 | ||
| 6201 | #define MDIO_PMA_REG_84823_LED3_STRETCH_EN 0x0080 | ||
| 6198 | 6202 | ||
| 6199 | #define IGU_FUNC_BASE 0x0400 | 6203 | #define IGU_FUNC_BASE 0x0400 |
| 6200 | 6204 | ||
diff --git a/drivers/net/gianfar.c b/drivers/net/gianfar.c index 119aa2000c2..5ed8f9f9419 100644 --- a/drivers/net/gianfar.c +++ b/drivers/net/gianfar.c | |||
| @@ -1920,7 +1920,7 @@ int startup_gfar(struct net_device *ndev) | |||
| 1920 | if (err) { | 1920 | if (err) { |
| 1921 | for (j = 0; j < i; j++) | 1921 | for (j = 0; j < i; j++) |
| 1922 | free_grp_irqs(&priv->gfargrp[j]); | 1922 | free_grp_irqs(&priv->gfargrp[j]); |
| 1923 | goto irq_fail; | 1923 | goto irq_fail; |
| 1924 | } | 1924 | } |
| 1925 | } | 1925 | } |
| 1926 | 1926 | ||
diff --git a/drivers/net/irda/sh_irda.c b/drivers/net/irda/sh_irda.c index 9e3f4f54281..4488bd581ec 100644 --- a/drivers/net/irda/sh_irda.c +++ b/drivers/net/irda/sh_irda.c | |||
| @@ -635,7 +635,7 @@ static int sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
| 635 | 635 | ||
| 636 | ret = sh_irda_set_baudrate(self, speed); | 636 | ret = sh_irda_set_baudrate(self, speed); |
| 637 | if (ret < 0) | 637 | if (ret < 0) |
| 638 | return ret; | 638 | goto sh_irda_hard_xmit_end; |
| 639 | 639 | ||
| 640 | self->tx_buff.len = 0; | 640 | self->tx_buff.len = 0; |
| 641 | if (skb->len) { | 641 | if (skb->len) { |
| @@ -652,11 +652,21 @@ static int sh_irda_hard_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
| 652 | 652 | ||
| 653 | sh_irda_write(self, IRTFLR, self->tx_buff.len); | 653 | sh_irda_write(self, IRTFLR, self->tx_buff.len); |
| 654 | sh_irda_write(self, IRTCTR, ARMOD | TE); | 654 | sh_irda_write(self, IRTCTR, ARMOD | TE); |
| 655 | } | 655 | } else |
| 656 | goto sh_irda_hard_xmit_end; | ||
| 656 | 657 | ||
| 657 | dev_kfree_skb(skb); | 658 | dev_kfree_skb(skb); |
| 658 | 659 | ||
| 659 | return 0; | 660 | return 0; |
| 661 | |||
| 662 | sh_irda_hard_xmit_end: | ||
| 663 | sh_irda_set_baudrate(self, 9600); | ||
| 664 | netif_wake_queue(self->ndev); | ||
| 665 | sh_irda_rcv_ctrl(self, 1); | ||
| 666 | dev_kfree_skb(skb); | ||
| 667 | |||
| 668 | return ret; | ||
| 669 | |||
| 660 | } | 670 | } |
| 661 | 671 | ||
| 662 | static int sh_irda_ioctl(struct net_device *ndev, struct ifreq *ifreq, int cmd) | 672 | static int sh_irda_ioctl(struct net_device *ndev, struct ifreq *ifreq, int cmd) |
diff --git a/drivers/net/ns83820.c b/drivers/net/ns83820.c index 84134c766f3..a41b2cf4d91 100644 --- a/drivers/net/ns83820.c +++ b/drivers/net/ns83820.c | |||
| @@ -1988,12 +1988,11 @@ static int __devinit ns83820_init_one(struct pci_dev *pci_dev, | |||
| 1988 | } | 1988 | } |
| 1989 | 1989 | ||
| 1990 | ndev = alloc_etherdev(sizeof(struct ns83820)); | 1990 | ndev = alloc_etherdev(sizeof(struct ns83820)); |
| 1991 | dev = PRIV(ndev); | ||
| 1992 | |||
| 1993 | err = -ENOMEM; | 1991 | err = -ENOMEM; |
| 1994 | if (!dev) | 1992 | if (!ndev) |
| 1995 | goto out; | 1993 | goto out; |
| 1996 | 1994 | ||
| 1995 | dev = PRIV(ndev); | ||
| 1997 | dev->ndev = ndev; | 1996 | dev->ndev = ndev; |
| 1998 | 1997 | ||
| 1999 | spin_lock_init(&dev->rx_info.lock); | 1998 | spin_lock_init(&dev->rx_info.lock); |
diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c index d776c4a8d3c..04e8ce14a1d 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c | |||
| @@ -54,7 +54,7 @@ | |||
| 54 | #include <linux/usb/usbnet.h> | 54 | #include <linux/usb/usbnet.h> |
| 55 | #include <linux/usb/cdc.h> | 55 | #include <linux/usb/cdc.h> |
| 56 | 56 | ||
| 57 | #define DRIVER_VERSION "30-Nov-2010" | 57 | #define DRIVER_VERSION "17-Jan-2011" |
| 58 | 58 | ||
| 59 | /* CDC NCM subclass 3.2.1 */ | 59 | /* CDC NCM subclass 3.2.1 */ |
| 60 | #define USB_CDC_NCM_NDP16_LENGTH_MIN 0x10 | 60 | #define USB_CDC_NCM_NDP16_LENGTH_MIN 0x10 |
| @@ -868,15 +868,19 @@ static void cdc_ncm_tx_timeout(unsigned long arg) | |||
| 868 | if (ctx->tx_timer_pending != 0) { | 868 | if (ctx->tx_timer_pending != 0) { |
| 869 | ctx->tx_timer_pending--; | 869 | ctx->tx_timer_pending--; |
| 870 | restart = 1; | 870 | restart = 1; |
| 871 | } else | 871 | } else { |
| 872 | restart = 0; | 872 | restart = 0; |
| 873 | } | ||
| 873 | 874 | ||
| 874 | spin_unlock(&ctx->mtx); | 875 | spin_unlock(&ctx->mtx); |
| 875 | 876 | ||
| 876 | if (restart) | 877 | if (restart) { |
| 878 | spin_lock(&ctx->mtx); | ||
| 877 | cdc_ncm_tx_timeout_start(ctx); | 879 | cdc_ncm_tx_timeout_start(ctx); |
| 878 | else if (ctx->netdev != NULL) | 880 | spin_unlock(&ctx->mtx); |
| 881 | } else if (ctx->netdev != NULL) { | ||
| 879 | usbnet_start_xmit(NULL, ctx->netdev); | 882 | usbnet_start_xmit(NULL, ctx->netdev); |
| 883 | } | ||
| 880 | } | 884 | } |
| 881 | 885 | ||
| 882 | static struct sk_buff * | 886 | static struct sk_buff * |
| @@ -900,7 +904,6 @@ cdc_ncm_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) | |||
| 900 | skb_out = cdc_ncm_fill_tx_frame(ctx, skb); | 904 | skb_out = cdc_ncm_fill_tx_frame(ctx, skb); |
| 901 | if (ctx->tx_curr_skb != NULL) | 905 | if (ctx->tx_curr_skb != NULL) |
| 902 | need_timer = 1; | 906 | need_timer = 1; |
| 903 | spin_unlock(&ctx->mtx); | ||
| 904 | 907 | ||
| 905 | /* Start timer, if there is a remaining skb */ | 908 | /* Start timer, if there is a remaining skb */ |
| 906 | if (need_timer) | 909 | if (need_timer) |
| @@ -908,6 +911,8 @@ cdc_ncm_tx_fixup(struct usbnet *dev, struct sk_buff *skb, gfp_t flags) | |||
| 908 | 911 | ||
| 909 | if (skb_out) | 912 | if (skb_out) |
| 910 | dev->net->stats.tx_packets += ctx->tx_curr_frame_num; | 913 | dev->net->stats.tx_packets += ctx->tx_curr_frame_num; |
| 914 | |||
| 915 | spin_unlock(&ctx->mtx); | ||
| 911 | return skb_out; | 916 | return skb_out; |
| 912 | 917 | ||
| 913 | error: | 918 | error: |
| @@ -1020,8 +1025,8 @@ static int cdc_ncm_rx_fixup(struct usbnet *dev, struct sk_buff *skb_in) | |||
| 1020 | if (((offset + temp) > actlen) || | 1025 | if (((offset + temp) > actlen) || |
| 1021 | (temp > CDC_NCM_MAX_DATAGRAM_SIZE) || (temp < ETH_HLEN)) { | 1026 | (temp > CDC_NCM_MAX_DATAGRAM_SIZE) || (temp < ETH_HLEN)) { |
| 1022 | pr_debug("invalid frame detected (ignored)" | 1027 | pr_debug("invalid frame detected (ignored)" |
| 1023 | "offset[%u]=%u, length=%u, skb=%p\n", | 1028 | "offset[%u]=%u, length=%u, skb=%p\n", |
| 1024 | x, offset, temp, skb_in); | 1029 | x, offset, temp, skb_in); |
| 1025 | if (!x) | 1030 | if (!x) |
| 1026 | goto error; | 1031 | goto error; |
| 1027 | break; | 1032 | break; |
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index d143e8b72b5..cc14b4a7504 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c | |||
| @@ -48,6 +48,9 @@ static atomic_t devices_found; | |||
| 48 | static int enable_mq = 1; | 48 | static int enable_mq = 1; |
| 49 | static int irq_share_mode; | 49 | static int irq_share_mode; |
| 50 | 50 | ||
| 51 | static void | ||
| 52 | vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac); | ||
| 53 | |||
| 51 | /* | 54 | /* |
| 52 | * Enable/Disable the given intr | 55 | * Enable/Disable the given intr |
| 53 | */ | 56 | */ |
| @@ -139,9 +142,13 @@ vmxnet3_check_link(struct vmxnet3_adapter *adapter, bool affectTxQueue) | |||
| 139 | { | 142 | { |
| 140 | u32 ret; | 143 | u32 ret; |
| 141 | int i; | 144 | int i; |
| 145 | unsigned long flags; | ||
| 142 | 146 | ||
| 147 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 143 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK); | 148 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK); |
| 144 | ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); | 149 | ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); |
| 150 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 151 | |||
| 145 | adapter->link_speed = ret >> 16; | 152 | adapter->link_speed = ret >> 16; |
| 146 | if (ret & 1) { /* Link is up. */ | 153 | if (ret & 1) { /* Link is up. */ |
| 147 | printk(KERN_INFO "%s: NIC Link is Up %d Mbps\n", | 154 | printk(KERN_INFO "%s: NIC Link is Up %d Mbps\n", |
| @@ -183,8 +190,10 @@ vmxnet3_process_events(struct vmxnet3_adapter *adapter) | |||
| 183 | 190 | ||
| 184 | /* Check if there is an error on xmit/recv queues */ | 191 | /* Check if there is an error on xmit/recv queues */ |
| 185 | if (events & (VMXNET3_ECR_TQERR | VMXNET3_ECR_RQERR)) { | 192 | if (events & (VMXNET3_ECR_TQERR | VMXNET3_ECR_RQERR)) { |
| 193 | spin_lock(&adapter->cmd_lock); | ||
| 186 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 194 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 187 | VMXNET3_CMD_GET_QUEUE_STATUS); | 195 | VMXNET3_CMD_GET_QUEUE_STATUS); |
| 196 | spin_unlock(&adapter->cmd_lock); | ||
| 188 | 197 | ||
| 189 | for (i = 0; i < adapter->num_tx_queues; i++) | 198 | for (i = 0; i < adapter->num_tx_queues; i++) |
| 190 | if (adapter->tqd_start[i].status.stopped) | 199 | if (adapter->tqd_start[i].status.stopped) |
| @@ -804,30 +813,25 @@ vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq, | |||
| 804 | skb_transport_header(skb))->doff * 4; | 813 | skb_transport_header(skb))->doff * 4; |
| 805 | ctx->copy_size = ctx->eth_ip_hdr_size + ctx->l4_hdr_size; | 814 | ctx->copy_size = ctx->eth_ip_hdr_size + ctx->l4_hdr_size; |
| 806 | } else { | 815 | } else { |
| 807 | unsigned int pull_size; | ||
| 808 | |||
| 809 | if (skb->ip_summed == CHECKSUM_PARTIAL) { | 816 | if (skb->ip_summed == CHECKSUM_PARTIAL) { |
| 810 | ctx->eth_ip_hdr_size = skb_checksum_start_offset(skb); | 817 | ctx->eth_ip_hdr_size = skb_checksum_start_offset(skb); |
| 811 | 818 | ||
| 812 | if (ctx->ipv4) { | 819 | if (ctx->ipv4) { |
| 813 | struct iphdr *iph = (struct iphdr *) | 820 | struct iphdr *iph = (struct iphdr *) |
| 814 | skb_network_header(skb); | 821 | skb_network_header(skb); |
| 815 | if (iph->protocol == IPPROTO_TCP) { | 822 | if (iph->protocol == IPPROTO_TCP) |
| 816 | pull_size = ctx->eth_ip_hdr_size + | ||
| 817 | sizeof(struct tcphdr); | ||
| 818 | |||
| 819 | if (unlikely(!pskb_may_pull(skb, | ||
| 820 | pull_size))) { | ||
| 821 | goto err; | ||
| 822 | } | ||
| 823 | ctx->l4_hdr_size = ((struct tcphdr *) | 823 | ctx->l4_hdr_size = ((struct tcphdr *) |
| 824 | skb_transport_header(skb))->doff * 4; | 824 | skb_transport_header(skb))->doff * 4; |
| 825 | } else if (iph->protocol == IPPROTO_UDP) { | 825 | else if (iph->protocol == IPPROTO_UDP) |
| 826 | /* | ||
| 827 | * Use tcp header size so that bytes to | ||
| 828 | * be copied are more than required by | ||
| 829 | * the device. | ||
| 830 | */ | ||
| 826 | ctx->l4_hdr_size = | 831 | ctx->l4_hdr_size = |
| 827 | sizeof(struct udphdr); | 832 | sizeof(struct tcphdr); |
| 828 | } else { | 833 | else |
| 829 | ctx->l4_hdr_size = 0; | 834 | ctx->l4_hdr_size = 0; |
| 830 | } | ||
| 831 | } else { | 835 | } else { |
| 832 | /* for simplicity, don't copy L4 headers */ | 836 | /* for simplicity, don't copy L4 headers */ |
| 833 | ctx->l4_hdr_size = 0; | 837 | ctx->l4_hdr_size = 0; |
| @@ -1859,18 +1863,14 @@ vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) | |||
| 1859 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 1863 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 1860 | struct Vmxnet3_DriverShared *shared = adapter->shared; | 1864 | struct Vmxnet3_DriverShared *shared = adapter->shared; |
| 1861 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; | 1865 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; |
| 1866 | unsigned long flags; | ||
| 1862 | 1867 | ||
| 1863 | if (grp) { | 1868 | if (grp) { |
| 1864 | /* add vlan rx stripping. */ | 1869 | /* add vlan rx stripping. */ |
| 1865 | if (adapter->netdev->features & NETIF_F_HW_VLAN_RX) { | 1870 | if (adapter->netdev->features & NETIF_F_HW_VLAN_RX) { |
| 1866 | int i; | 1871 | int i; |
| 1867 | struct Vmxnet3_DSDevRead *devRead = &shared->devRead; | ||
| 1868 | adapter->vlan_grp = grp; | 1872 | adapter->vlan_grp = grp; |
| 1869 | 1873 | ||
| 1870 | /* update FEATURES to device */ | ||
| 1871 | devRead->misc.uptFeatures |= UPT1_F_RXVLAN; | ||
| 1872 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | ||
| 1873 | VMXNET3_CMD_UPDATE_FEATURE); | ||
| 1874 | /* | 1874 | /* |
| 1875 | * Clear entire vfTable; then enable untagged pkts. | 1875 | * Clear entire vfTable; then enable untagged pkts. |
| 1876 | * Note: setting one entry in vfTable to non-zero turns | 1876 | * Note: setting one entry in vfTable to non-zero turns |
| @@ -1880,8 +1880,10 @@ vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) | |||
| 1880 | vfTable[i] = 0; | 1880 | vfTable[i] = 0; |
| 1881 | 1881 | ||
| 1882 | VMXNET3_SET_VFTABLE_ENTRY(vfTable, 0); | 1882 | VMXNET3_SET_VFTABLE_ENTRY(vfTable, 0); |
| 1883 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 1883 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 1884 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 1884 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); | 1885 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); |
| 1886 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 1885 | } else { | 1887 | } else { |
| 1886 | printk(KERN_ERR "%s: vlan_rx_register when device has " | 1888 | printk(KERN_ERR "%s: vlan_rx_register when device has " |
| 1887 | "no NETIF_F_HW_VLAN_RX\n", netdev->name); | 1889 | "no NETIF_F_HW_VLAN_RX\n", netdev->name); |
| @@ -1900,13 +1902,10 @@ vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) | |||
| 1900 | */ | 1902 | */ |
| 1901 | vfTable[i] = 0; | 1903 | vfTable[i] = 0; |
| 1902 | } | 1904 | } |
| 1905 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 1903 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 1906 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 1904 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); | 1907 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); |
| 1905 | 1908 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | |
| 1906 | /* update FEATURES to device */ | ||
| 1907 | devRead->misc.uptFeatures &= ~UPT1_F_RXVLAN; | ||
| 1908 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | ||
| 1909 | VMXNET3_CMD_UPDATE_FEATURE); | ||
| 1910 | } | 1909 | } |
| 1911 | } | 1910 | } |
| 1912 | } | 1911 | } |
| @@ -1939,10 +1938,13 @@ vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid) | |||
| 1939 | { | 1938 | { |
| 1940 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 1939 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 1941 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; | 1940 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; |
| 1941 | unsigned long flags; | ||
| 1942 | 1942 | ||
| 1943 | VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid); | 1943 | VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid); |
| 1944 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 1944 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 1945 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 1945 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); | 1946 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); |
| 1947 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 1946 | } | 1948 | } |
| 1947 | 1949 | ||
| 1948 | 1950 | ||
| @@ -1951,10 +1953,13 @@ vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, u16 vid) | |||
| 1951 | { | 1953 | { |
| 1952 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 1954 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 1953 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; | 1955 | u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable; |
| 1956 | unsigned long flags; | ||
| 1954 | 1957 | ||
| 1955 | VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid); | 1958 | VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid); |
| 1959 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 1956 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 1960 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 1957 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); | 1961 | VMXNET3_CMD_UPDATE_VLAN_FILTERS); |
| 1962 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 1958 | } | 1963 | } |
| 1959 | 1964 | ||
| 1960 | 1965 | ||
| @@ -1985,6 +1990,7 @@ static void | |||
| 1985 | vmxnet3_set_mc(struct net_device *netdev) | 1990 | vmxnet3_set_mc(struct net_device *netdev) |
| 1986 | { | 1991 | { |
| 1987 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 1992 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 1993 | unsigned long flags; | ||
| 1988 | struct Vmxnet3_RxFilterConf *rxConf = | 1994 | struct Vmxnet3_RxFilterConf *rxConf = |
| 1989 | &adapter->shared->devRead.rxFilterConf; | 1995 | &adapter->shared->devRead.rxFilterConf; |
| 1990 | u8 *new_table = NULL; | 1996 | u8 *new_table = NULL; |
| @@ -2020,6 +2026,7 @@ vmxnet3_set_mc(struct net_device *netdev) | |||
| 2020 | rxConf->mfTablePA = 0; | 2026 | rxConf->mfTablePA = 0; |
| 2021 | } | 2027 | } |
| 2022 | 2028 | ||
| 2029 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 2023 | if (new_mode != rxConf->rxMode) { | 2030 | if (new_mode != rxConf->rxMode) { |
| 2024 | rxConf->rxMode = cpu_to_le32(new_mode); | 2031 | rxConf->rxMode = cpu_to_le32(new_mode); |
| 2025 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 2032 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| @@ -2028,6 +2035,7 @@ vmxnet3_set_mc(struct net_device *netdev) | |||
| 2028 | 2035 | ||
| 2029 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 2036 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 2030 | VMXNET3_CMD_UPDATE_MAC_FILTERS); | 2037 | VMXNET3_CMD_UPDATE_MAC_FILTERS); |
| 2038 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 2031 | 2039 | ||
| 2032 | kfree(new_table); | 2040 | kfree(new_table); |
| 2033 | } | 2041 | } |
| @@ -2080,10 +2088,8 @@ vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) | |||
| 2080 | devRead->misc.uptFeatures |= UPT1_F_LRO; | 2088 | devRead->misc.uptFeatures |= UPT1_F_LRO; |
| 2081 | devRead->misc.maxNumRxSG = cpu_to_le16(1 + MAX_SKB_FRAGS); | 2089 | devRead->misc.maxNumRxSG = cpu_to_le16(1 + MAX_SKB_FRAGS); |
| 2082 | } | 2090 | } |
| 2083 | if ((adapter->netdev->features & NETIF_F_HW_VLAN_RX) && | 2091 | if (adapter->netdev->features & NETIF_F_HW_VLAN_RX) |
| 2084 | adapter->vlan_grp) { | ||
| 2085 | devRead->misc.uptFeatures |= UPT1_F_RXVLAN; | 2092 | devRead->misc.uptFeatures |= UPT1_F_RXVLAN; |
| 2086 | } | ||
| 2087 | 2093 | ||
| 2088 | devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu); | 2094 | devRead->misc.mtu = cpu_to_le32(adapter->netdev->mtu); |
| 2089 | devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa); | 2095 | devRead->misc.queueDescPA = cpu_to_le64(adapter->queue_desc_pa); |
| @@ -2168,6 +2174,8 @@ vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter) | |||
| 2168 | /* rx filter settings */ | 2174 | /* rx filter settings */ |
| 2169 | devRead->rxFilterConf.rxMode = 0; | 2175 | devRead->rxFilterConf.rxMode = 0; |
| 2170 | vmxnet3_restore_vlan(adapter); | 2176 | vmxnet3_restore_vlan(adapter); |
| 2177 | vmxnet3_write_mac_addr(adapter, adapter->netdev->dev_addr); | ||
| 2178 | |||
| 2171 | /* the rest are already zeroed */ | 2179 | /* the rest are already zeroed */ |
| 2172 | } | 2180 | } |
| 2173 | 2181 | ||
| @@ -2177,6 +2185,7 @@ vmxnet3_activate_dev(struct vmxnet3_adapter *adapter) | |||
| 2177 | { | 2185 | { |
| 2178 | int err, i; | 2186 | int err, i; |
| 2179 | u32 ret; | 2187 | u32 ret; |
| 2188 | unsigned long flags; | ||
| 2180 | 2189 | ||
| 2181 | dev_dbg(&adapter->netdev->dev, "%s: skb_buf_size %d, rx_buf_per_pkt %d," | 2190 | dev_dbg(&adapter->netdev->dev, "%s: skb_buf_size %d, rx_buf_per_pkt %d," |
| 2182 | " ring sizes %u %u %u\n", adapter->netdev->name, | 2191 | " ring sizes %u %u %u\n", adapter->netdev->name, |
| @@ -2206,9 +2215,11 @@ vmxnet3_activate_dev(struct vmxnet3_adapter *adapter) | |||
| 2206 | adapter->shared_pa)); | 2215 | adapter->shared_pa)); |
| 2207 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI( | 2216 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, VMXNET3_GET_ADDR_HI( |
| 2208 | adapter->shared_pa)); | 2217 | adapter->shared_pa)); |
| 2218 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 2209 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 2219 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 2210 | VMXNET3_CMD_ACTIVATE_DEV); | 2220 | VMXNET3_CMD_ACTIVATE_DEV); |
| 2211 | ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); | 2221 | ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); |
| 2222 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 2212 | 2223 | ||
| 2213 | if (ret != 0) { | 2224 | if (ret != 0) { |
| 2214 | printk(KERN_ERR "Failed to activate dev %s: error %u\n", | 2225 | printk(KERN_ERR "Failed to activate dev %s: error %u\n", |
| @@ -2255,7 +2266,10 @@ rq_err: | |||
| 2255 | void | 2266 | void |
| 2256 | vmxnet3_reset_dev(struct vmxnet3_adapter *adapter) | 2267 | vmxnet3_reset_dev(struct vmxnet3_adapter *adapter) |
| 2257 | { | 2268 | { |
| 2269 | unsigned long flags; | ||
| 2270 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 2258 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV); | 2271 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV); |
| 2272 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 2259 | } | 2273 | } |
| 2260 | 2274 | ||
| 2261 | 2275 | ||
| @@ -2263,12 +2277,15 @@ int | |||
| 2263 | vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter) | 2277 | vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter) |
| 2264 | { | 2278 | { |
| 2265 | int i; | 2279 | int i; |
| 2280 | unsigned long flags; | ||
| 2266 | if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state)) | 2281 | if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state)) |
| 2267 | return 0; | 2282 | return 0; |
| 2268 | 2283 | ||
| 2269 | 2284 | ||
| 2285 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 2270 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 2286 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 2271 | VMXNET3_CMD_QUIESCE_DEV); | 2287 | VMXNET3_CMD_QUIESCE_DEV); |
| 2288 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 2272 | vmxnet3_disable_all_intrs(adapter); | 2289 | vmxnet3_disable_all_intrs(adapter); |
| 2273 | 2290 | ||
| 2274 | for (i = 0; i < adapter->num_rx_queues; i++) | 2291 | for (i = 0; i < adapter->num_rx_queues; i++) |
| @@ -2426,7 +2443,7 @@ vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter) | |||
| 2426 | sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN; | 2443 | sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN; |
| 2427 | ring0_size = adapter->rx_queue[0].rx_ring[0].size; | 2444 | ring0_size = adapter->rx_queue[0].rx_ring[0].size; |
| 2428 | ring0_size = (ring0_size + sz - 1) / sz * sz; | 2445 | ring0_size = (ring0_size + sz - 1) / sz * sz; |
| 2429 | ring0_size = min_t(u32, rq->rx_ring[0].size, VMXNET3_RX_RING_MAX_SIZE / | 2446 | ring0_size = min_t(u32, ring0_size, VMXNET3_RX_RING_MAX_SIZE / |
| 2430 | sz * sz); | 2447 | sz * sz); |
| 2431 | ring1_size = adapter->rx_queue[0].rx_ring[1].size; | 2448 | ring1_size = adapter->rx_queue[0].rx_ring[1].size; |
| 2432 | comp_size = ring0_size + ring1_size; | 2449 | comp_size = ring0_size + ring1_size; |
| @@ -2695,7 +2712,7 @@ vmxnet3_acquire_msix_vectors(struct vmxnet3_adapter *adapter, | |||
| 2695 | break; | 2712 | break; |
| 2696 | } else { | 2713 | } else { |
| 2697 | /* If fails to enable required number of MSI-x vectors | 2714 | /* If fails to enable required number of MSI-x vectors |
| 2698 | * try enabling 3 of them. One each for rx, tx and event | 2715 | * try enabling minimum number of vectors required. |
| 2699 | */ | 2716 | */ |
| 2700 | vectors = vector_threshold; | 2717 | vectors = vector_threshold; |
| 2701 | printk(KERN_ERR "Failed to enable %d MSI-X for %s, try" | 2718 | printk(KERN_ERR "Failed to enable %d MSI-X for %s, try" |
| @@ -2718,9 +2735,11 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) | |||
| 2718 | u32 cfg; | 2735 | u32 cfg; |
| 2719 | 2736 | ||
| 2720 | /* intr settings */ | 2737 | /* intr settings */ |
| 2738 | spin_lock(&adapter->cmd_lock); | ||
| 2721 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 2739 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 2722 | VMXNET3_CMD_GET_CONF_INTR); | 2740 | VMXNET3_CMD_GET_CONF_INTR); |
| 2723 | cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); | 2741 | cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD); |
| 2742 | spin_unlock(&adapter->cmd_lock); | ||
| 2724 | adapter->intr.type = cfg & 0x3; | 2743 | adapter->intr.type = cfg & 0x3; |
| 2725 | adapter->intr.mask_mode = (cfg >> 2) & 0x3; | 2744 | adapter->intr.mask_mode = (cfg >> 2) & 0x3; |
| 2726 | 2745 | ||
| @@ -2755,7 +2774,7 @@ vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter) | |||
| 2755 | */ | 2774 | */ |
| 2756 | if (err == VMXNET3_LINUX_MIN_MSIX_VECT) { | 2775 | if (err == VMXNET3_LINUX_MIN_MSIX_VECT) { |
| 2757 | if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE | 2776 | if (adapter->share_intr != VMXNET3_INTR_BUDDYSHARE |
| 2758 | || adapter->num_rx_queues != 2) { | 2777 | || adapter->num_rx_queues != 1) { |
| 2759 | adapter->share_intr = VMXNET3_INTR_TXSHARE; | 2778 | adapter->share_intr = VMXNET3_INTR_TXSHARE; |
| 2760 | printk(KERN_ERR "Number of rx queues : 1\n"); | 2779 | printk(KERN_ERR "Number of rx queues : 1\n"); |
| 2761 | adapter->num_rx_queues = 1; | 2780 | adapter->num_rx_queues = 1; |
| @@ -2905,6 +2924,7 @@ vmxnet3_probe_device(struct pci_dev *pdev, | |||
| 2905 | adapter->netdev = netdev; | 2924 | adapter->netdev = netdev; |
| 2906 | adapter->pdev = pdev; | 2925 | adapter->pdev = pdev; |
| 2907 | 2926 | ||
| 2927 | spin_lock_init(&adapter->cmd_lock); | ||
| 2908 | adapter->shared = pci_alloc_consistent(adapter->pdev, | 2928 | adapter->shared = pci_alloc_consistent(adapter->pdev, |
| 2909 | sizeof(struct Vmxnet3_DriverShared), | 2929 | sizeof(struct Vmxnet3_DriverShared), |
| 2910 | &adapter->shared_pa); | 2930 | &adapter->shared_pa); |
| @@ -3108,11 +3128,15 @@ vmxnet3_suspend(struct device *device) | |||
| 3108 | u8 *arpreq; | 3128 | u8 *arpreq; |
| 3109 | struct in_device *in_dev; | 3129 | struct in_device *in_dev; |
| 3110 | struct in_ifaddr *ifa; | 3130 | struct in_ifaddr *ifa; |
| 3131 | unsigned long flags; | ||
| 3111 | int i = 0; | 3132 | int i = 0; |
| 3112 | 3133 | ||
| 3113 | if (!netif_running(netdev)) | 3134 | if (!netif_running(netdev)) |
| 3114 | return 0; | 3135 | return 0; |
| 3115 | 3136 | ||
| 3137 | for (i = 0; i < adapter->num_rx_queues; i++) | ||
| 3138 | napi_disable(&adapter->rx_queue[i].napi); | ||
| 3139 | |||
| 3116 | vmxnet3_disable_all_intrs(adapter); | 3140 | vmxnet3_disable_all_intrs(adapter); |
| 3117 | vmxnet3_free_irqs(adapter); | 3141 | vmxnet3_free_irqs(adapter); |
| 3118 | vmxnet3_free_intr_resources(adapter); | 3142 | vmxnet3_free_intr_resources(adapter); |
| @@ -3188,8 +3212,10 @@ skip_arp: | |||
| 3188 | adapter->shared->devRead.pmConfDesc.confPA = cpu_to_le64(virt_to_phys( | 3212 | adapter->shared->devRead.pmConfDesc.confPA = cpu_to_le64(virt_to_phys( |
| 3189 | pmConf)); | 3213 | pmConf)); |
| 3190 | 3214 | ||
| 3215 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 3191 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 3216 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 3192 | VMXNET3_CMD_UPDATE_PMCFG); | 3217 | VMXNET3_CMD_UPDATE_PMCFG); |
| 3218 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 3193 | 3219 | ||
| 3194 | pci_save_state(pdev); | 3220 | pci_save_state(pdev); |
| 3195 | pci_enable_wake(pdev, pci_choose_state(pdev, PMSG_SUSPEND), | 3221 | pci_enable_wake(pdev, pci_choose_state(pdev, PMSG_SUSPEND), |
| @@ -3204,7 +3230,8 @@ skip_arp: | |||
| 3204 | static int | 3230 | static int |
| 3205 | vmxnet3_resume(struct device *device) | 3231 | vmxnet3_resume(struct device *device) |
| 3206 | { | 3232 | { |
| 3207 | int err; | 3233 | int err, i = 0; |
| 3234 | unsigned long flags; | ||
| 3208 | struct pci_dev *pdev = to_pci_dev(device); | 3235 | struct pci_dev *pdev = to_pci_dev(device); |
| 3209 | struct net_device *netdev = pci_get_drvdata(pdev); | 3236 | struct net_device *netdev = pci_get_drvdata(pdev); |
| 3210 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 3237 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| @@ -3232,10 +3259,14 @@ vmxnet3_resume(struct device *device) | |||
| 3232 | 3259 | ||
| 3233 | pci_enable_wake(pdev, PCI_D0, 0); | 3260 | pci_enable_wake(pdev, PCI_D0, 0); |
| 3234 | 3261 | ||
| 3262 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 3235 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 3263 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 3236 | VMXNET3_CMD_UPDATE_PMCFG); | 3264 | VMXNET3_CMD_UPDATE_PMCFG); |
| 3265 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 3237 | vmxnet3_alloc_intr_resources(adapter); | 3266 | vmxnet3_alloc_intr_resources(adapter); |
| 3238 | vmxnet3_request_irqs(adapter); | 3267 | vmxnet3_request_irqs(adapter); |
| 3268 | for (i = 0; i < adapter->num_rx_queues; i++) | ||
| 3269 | napi_enable(&adapter->rx_queue[i].napi); | ||
| 3239 | vmxnet3_enable_all_intrs(adapter); | 3270 | vmxnet3_enable_all_intrs(adapter); |
| 3240 | 3271 | ||
| 3241 | return 0; | 3272 | return 0; |
diff --git a/drivers/net/vmxnet3/vmxnet3_ethtool.c b/drivers/net/vmxnet3/vmxnet3_ethtool.c index 8e17fc8a7fe..81254be85b9 100644 --- a/drivers/net/vmxnet3/vmxnet3_ethtool.c +++ b/drivers/net/vmxnet3/vmxnet3_ethtool.c | |||
| @@ -45,6 +45,7 @@ static int | |||
| 45 | vmxnet3_set_rx_csum(struct net_device *netdev, u32 val) | 45 | vmxnet3_set_rx_csum(struct net_device *netdev, u32 val) |
| 46 | { | 46 | { |
| 47 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 47 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 48 | unsigned long flags; | ||
| 48 | 49 | ||
| 49 | if (adapter->rxcsum != val) { | 50 | if (adapter->rxcsum != val) { |
| 50 | adapter->rxcsum = val; | 51 | adapter->rxcsum = val; |
| @@ -56,8 +57,10 @@ vmxnet3_set_rx_csum(struct net_device *netdev, u32 val) | |||
| 56 | adapter->shared->devRead.misc.uptFeatures &= | 57 | adapter->shared->devRead.misc.uptFeatures &= |
| 57 | ~UPT1_F_RXCSUM; | 58 | ~UPT1_F_RXCSUM; |
| 58 | 59 | ||
| 60 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 59 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 61 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 60 | VMXNET3_CMD_UPDATE_FEATURE); | 62 | VMXNET3_CMD_UPDATE_FEATURE); |
| 63 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 61 | } | 64 | } |
| 62 | } | 65 | } |
| 63 | return 0; | 66 | return 0; |
| @@ -68,76 +71,78 @@ vmxnet3_set_rx_csum(struct net_device *netdev, u32 val) | |||
| 68 | static const struct vmxnet3_stat_desc | 71 | static const struct vmxnet3_stat_desc |
| 69 | vmxnet3_tq_dev_stats[] = { | 72 | vmxnet3_tq_dev_stats[] = { |
| 70 | /* description, offset */ | 73 | /* description, offset */ |
| 71 | { "TSO pkts tx", offsetof(struct UPT1_TxStats, TSOPktsTxOK) }, | 74 | { "Tx Queue#", 0 }, |
| 72 | { "TSO bytes tx", offsetof(struct UPT1_TxStats, TSOBytesTxOK) }, | 75 | { " TSO pkts tx", offsetof(struct UPT1_TxStats, TSOPktsTxOK) }, |
| 73 | { "ucast pkts tx", offsetof(struct UPT1_TxStats, ucastPktsTxOK) }, | 76 | { " TSO bytes tx", offsetof(struct UPT1_TxStats, TSOBytesTxOK) }, |
| 74 | { "ucast bytes tx", offsetof(struct UPT1_TxStats, ucastBytesTxOK) }, | 77 | { " ucast pkts tx", offsetof(struct UPT1_TxStats, ucastPktsTxOK) }, |
| 75 | { "mcast pkts tx", offsetof(struct UPT1_TxStats, mcastPktsTxOK) }, | 78 | { " ucast bytes tx", offsetof(struct UPT1_TxStats, ucastBytesTxOK) }, |
| 76 | { "mcast bytes tx", offsetof(struct UPT1_TxStats, mcastBytesTxOK) }, | 79 | { " mcast pkts tx", offsetof(struct UPT1_TxStats, mcastPktsTxOK) }, |
| 77 | { "bcast pkts tx", offsetof(struct UPT1_TxStats, bcastPktsTxOK) }, | 80 | { " mcast bytes tx", offsetof(struct UPT1_TxStats, mcastBytesTxOK) }, |
| 78 | { "bcast bytes tx", offsetof(struct UPT1_TxStats, bcastBytesTxOK) }, | 81 | { " bcast pkts tx", offsetof(struct UPT1_TxStats, bcastPktsTxOK) }, |
| 79 | { "pkts tx err", offsetof(struct UPT1_TxStats, pktsTxError) }, | 82 | { " bcast bytes tx", offsetof(struct UPT1_TxStats, bcastBytesTxOK) }, |
| 80 | { "pkts tx discard", offsetof(struct UPT1_TxStats, pktsTxDiscard) }, | 83 | { " pkts tx err", offsetof(struct UPT1_TxStats, pktsTxError) }, |
| 84 | { " pkts tx discard", offsetof(struct UPT1_TxStats, pktsTxDiscard) }, | ||
| 81 | }; | 85 | }; |
| 82 | 86 | ||
| 83 | /* per tq stats maintained by the driver */ | 87 | /* per tq stats maintained by the driver */ |
| 84 | static const struct vmxnet3_stat_desc | 88 | static const struct vmxnet3_stat_desc |
| 85 | vmxnet3_tq_driver_stats[] = { | 89 | vmxnet3_tq_driver_stats[] = { |
| 86 | /* description, offset */ | 90 | /* description, offset */ |
| 87 | {"drv dropped tx total", offsetof(struct vmxnet3_tq_driver_stats, | 91 | {" drv dropped tx total", offsetof(struct vmxnet3_tq_driver_stats, |
| 88 | drop_total) }, | 92 | drop_total) }, |
| 89 | { " too many frags", offsetof(struct vmxnet3_tq_driver_stats, | 93 | { " too many frags", offsetof(struct vmxnet3_tq_driver_stats, |
| 90 | drop_too_many_frags) }, | 94 | drop_too_many_frags) }, |
| 91 | { " giant hdr", offsetof(struct vmxnet3_tq_driver_stats, | 95 | { " giant hdr", offsetof(struct vmxnet3_tq_driver_stats, |
| 92 | drop_oversized_hdr) }, | 96 | drop_oversized_hdr) }, |
| 93 | { " hdr err", offsetof(struct vmxnet3_tq_driver_stats, | 97 | { " hdr err", offsetof(struct vmxnet3_tq_driver_stats, |
| 94 | drop_hdr_inspect_err) }, | 98 | drop_hdr_inspect_err) }, |
| 95 | { " tso", offsetof(struct vmxnet3_tq_driver_stats, | 99 | { " tso", offsetof(struct vmxnet3_tq_driver_stats, |
| 96 | drop_tso) }, | 100 | drop_tso) }, |
| 97 | { "ring full", offsetof(struct vmxnet3_tq_driver_stats, | 101 | { " ring full", offsetof(struct vmxnet3_tq_driver_stats, |
| 98 | tx_ring_full) }, | 102 | tx_ring_full) }, |
| 99 | { "pkts linearized", offsetof(struct vmxnet3_tq_driver_stats, | 103 | { " pkts linearized", offsetof(struct vmxnet3_tq_driver_stats, |
| 100 | linearized) }, | 104 | linearized) }, |
| 101 | { "hdr cloned", offsetof(struct vmxnet3_tq_driver_stats, | 105 | { " hdr cloned", offsetof(struct vmxnet3_tq_driver_stats, |
| 102 | copy_skb_header) }, | 106 | copy_skb_header) }, |
| 103 | { "giant hdr", offsetof(struct vmxnet3_tq_driver_stats, | 107 | { " giant hdr", offsetof(struct vmxnet3_tq_driver_stats, |
| 104 | oversized_hdr) }, | 108 | oversized_hdr) }, |
| 105 | }; | 109 | }; |
| 106 | 110 | ||
| 107 | /* per rq stats maintained by the device */ | 111 | /* per rq stats maintained by the device */ |
| 108 | static const struct vmxnet3_stat_desc | 112 | static const struct vmxnet3_stat_desc |
| 109 | vmxnet3_rq_dev_stats[] = { | 113 | vmxnet3_rq_dev_stats[] = { |
| 110 | { "LRO pkts rx", offsetof(struct UPT1_RxStats, LROPktsRxOK) }, | 114 | { "Rx Queue#", 0 }, |
| 111 | { "LRO byte rx", offsetof(struct UPT1_RxStats, LROBytesRxOK) }, | 115 | { " LRO pkts rx", offsetof(struct UPT1_RxStats, LROPktsRxOK) }, |
| 112 | { "ucast pkts rx", offsetof(struct UPT1_RxStats, ucastPktsRxOK) }, | 116 | { " LRO byte rx", offsetof(struct UPT1_RxStats, LROBytesRxOK) }, |
| 113 | { "ucast bytes rx", offsetof(struct UPT1_RxStats, ucastBytesRxOK) }, | 117 | { " ucast pkts rx", offsetof(struct UPT1_RxStats, ucastPktsRxOK) }, |
| 114 | { "mcast pkts rx", offsetof(struct UPT1_RxStats, mcastPktsRxOK) }, | 118 | { " ucast bytes rx", offsetof(struct UPT1_RxStats, ucastBytesRxOK) }, |
| 115 | { "mcast bytes rx", offsetof(struct UPT1_RxStats, mcastBytesRxOK) }, | 119 | { " mcast pkts rx", offsetof(struct UPT1_RxStats, mcastPktsRxOK) }, |
| 116 | { "bcast pkts rx", offsetof(struct UPT1_RxStats, bcastPktsRxOK) }, | 120 | { " mcast bytes rx", offsetof(struct UPT1_RxStats, mcastBytesRxOK) }, |
| 117 | { "bcast bytes rx", offsetof(struct UPT1_RxStats, bcastBytesRxOK) }, | 121 | { " bcast pkts rx", offsetof(struct UPT1_RxStats, bcastPktsRxOK) }, |
| 118 | { "pkts rx out of buf", offsetof(struct UPT1_RxStats, pktsRxOutOfBuf) }, | 122 | { " bcast bytes rx", offsetof(struct UPT1_RxStats, bcastBytesRxOK) }, |
| 119 | { "pkts rx err", offsetof(struct UPT1_RxStats, pktsRxError) }, | 123 | { " pkts rx OOB", offsetof(struct UPT1_RxStats, pktsRxOutOfBuf) }, |
| 124 | { " pkts rx err", offsetof(struct UPT1_RxStats, pktsRxError) }, | ||
| 120 | }; | 125 | }; |
| 121 | 126 | ||
| 122 | /* per rq stats maintained by the driver */ | 127 | /* per rq stats maintained by the driver */ |
| 123 | static const struct vmxnet3_stat_desc | 128 | static const struct vmxnet3_stat_desc |
| 124 | vmxnet3_rq_driver_stats[] = { | 129 | vmxnet3_rq_driver_stats[] = { |
| 125 | /* description, offset */ | 130 | /* description, offset */ |
| 126 | { "drv dropped rx total", offsetof(struct vmxnet3_rq_driver_stats, | 131 | { " drv dropped rx total", offsetof(struct vmxnet3_rq_driver_stats, |
| 127 | drop_total) }, | 132 | drop_total) }, |
| 128 | { " err", offsetof(struct vmxnet3_rq_driver_stats, | 133 | { " err", offsetof(struct vmxnet3_rq_driver_stats, |
| 129 | drop_err) }, | 134 | drop_err) }, |
| 130 | { " fcs", offsetof(struct vmxnet3_rq_driver_stats, | 135 | { " fcs", offsetof(struct vmxnet3_rq_driver_stats, |
| 131 | drop_fcs) }, | 136 | drop_fcs) }, |
| 132 | { "rx buf alloc fail", offsetof(struct vmxnet3_rq_driver_stats, | 137 | { " rx buf alloc fail", offsetof(struct vmxnet3_rq_driver_stats, |
| 133 | rx_buf_alloc_failure) }, | 138 | rx_buf_alloc_failure) }, |
| 134 | }; | 139 | }; |
| 135 | 140 | ||
| 136 | /* gloabl stats maintained by the driver */ | 141 | /* gloabl stats maintained by the driver */ |
| 137 | static const struct vmxnet3_stat_desc | 142 | static const struct vmxnet3_stat_desc |
| 138 | vmxnet3_global_stats[] = { | 143 | vmxnet3_global_stats[] = { |
| 139 | /* description, offset */ | 144 | /* description, offset */ |
| 140 | { "tx timeout count", offsetof(struct vmxnet3_adapter, | 145 | { "tx timeout count", offsetof(struct vmxnet3_adapter, |
| 141 | tx_timeout_count) } | 146 | tx_timeout_count) } |
| 142 | }; | 147 | }; |
| 143 | 148 | ||
| @@ -151,12 +156,15 @@ vmxnet3_get_stats(struct net_device *netdev) | |||
| 151 | struct UPT1_TxStats *devTxStats; | 156 | struct UPT1_TxStats *devTxStats; |
| 152 | struct UPT1_RxStats *devRxStats; | 157 | struct UPT1_RxStats *devRxStats; |
| 153 | struct net_device_stats *net_stats = &netdev->stats; | 158 | struct net_device_stats *net_stats = &netdev->stats; |
| 159 | unsigned long flags; | ||
| 154 | int i; | 160 | int i; |
| 155 | 161 | ||
| 156 | adapter = netdev_priv(netdev); | 162 | adapter = netdev_priv(netdev); |
| 157 | 163 | ||
| 158 | /* Collect the dev stats into the shared area */ | 164 | /* Collect the dev stats into the shared area */ |
| 165 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 159 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_STATS); | 166 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_STATS); |
| 167 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 160 | 168 | ||
| 161 | memset(net_stats, 0, sizeof(*net_stats)); | 169 | memset(net_stats, 0, sizeof(*net_stats)); |
| 162 | for (i = 0; i < adapter->num_tx_queues; i++) { | 170 | for (i = 0; i < adapter->num_tx_queues; i++) { |
| @@ -193,12 +201,15 @@ vmxnet3_get_stats(struct net_device *netdev) | |||
| 193 | static int | 201 | static int |
| 194 | vmxnet3_get_sset_count(struct net_device *netdev, int sset) | 202 | vmxnet3_get_sset_count(struct net_device *netdev, int sset) |
| 195 | { | 203 | { |
| 204 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | ||
| 196 | switch (sset) { | 205 | switch (sset) { |
| 197 | case ETH_SS_STATS: | 206 | case ETH_SS_STATS: |
| 198 | return ARRAY_SIZE(vmxnet3_tq_dev_stats) + | 207 | return (ARRAY_SIZE(vmxnet3_tq_dev_stats) + |
| 199 | ARRAY_SIZE(vmxnet3_tq_driver_stats) + | 208 | ARRAY_SIZE(vmxnet3_tq_driver_stats)) * |
| 200 | ARRAY_SIZE(vmxnet3_rq_dev_stats) + | 209 | adapter->num_tx_queues + |
| 201 | ARRAY_SIZE(vmxnet3_rq_driver_stats) + | 210 | (ARRAY_SIZE(vmxnet3_rq_dev_stats) + |
| 211 | ARRAY_SIZE(vmxnet3_rq_driver_stats)) * | ||
| 212 | adapter->num_rx_queues + | ||
| 202 | ARRAY_SIZE(vmxnet3_global_stats); | 213 | ARRAY_SIZE(vmxnet3_global_stats); |
| 203 | default: | 214 | default: |
| 204 | return -EOPNOTSUPP; | 215 | return -EOPNOTSUPP; |
| @@ -206,10 +217,16 @@ vmxnet3_get_sset_count(struct net_device *netdev, int sset) | |||
| 206 | } | 217 | } |
| 207 | 218 | ||
| 208 | 219 | ||
| 220 | /* Should be multiple of 4 */ | ||
| 221 | #define NUM_TX_REGS 8 | ||
| 222 | #define NUM_RX_REGS 12 | ||
| 223 | |||
| 209 | static int | 224 | static int |
| 210 | vmxnet3_get_regs_len(struct net_device *netdev) | 225 | vmxnet3_get_regs_len(struct net_device *netdev) |
| 211 | { | 226 | { |
| 212 | return 20 * sizeof(u32); | 227 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 228 | return (adapter->num_tx_queues * NUM_TX_REGS * sizeof(u32) + | ||
| 229 | adapter->num_rx_queues * NUM_RX_REGS * sizeof(u32)); | ||
| 213 | } | 230 | } |
| 214 | 231 | ||
| 215 | 232 | ||
| @@ -240,29 +257,37 @@ vmxnet3_get_drvinfo(struct net_device *netdev, struct ethtool_drvinfo *drvinfo) | |||
| 240 | static void | 257 | static void |
| 241 | vmxnet3_get_strings(struct net_device *netdev, u32 stringset, u8 *buf) | 258 | vmxnet3_get_strings(struct net_device *netdev, u32 stringset, u8 *buf) |
| 242 | { | 259 | { |
| 260 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | ||
| 243 | if (stringset == ETH_SS_STATS) { | 261 | if (stringset == ETH_SS_STATS) { |
| 244 | int i; | 262 | int i, j; |
| 245 | 263 | for (j = 0; j < adapter->num_tx_queues; j++) { | |
| 246 | for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_dev_stats); i++) { | 264 | for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_dev_stats); i++) { |
| 247 | memcpy(buf, vmxnet3_tq_dev_stats[i].desc, | 265 | memcpy(buf, vmxnet3_tq_dev_stats[i].desc, |
| 248 | ETH_GSTRING_LEN); | 266 | ETH_GSTRING_LEN); |
| 249 | buf += ETH_GSTRING_LEN; | 267 | buf += ETH_GSTRING_LEN; |
| 250 | } | 268 | } |
| 251 | for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_driver_stats); i++) { | 269 | for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_driver_stats); |
| 252 | memcpy(buf, vmxnet3_tq_driver_stats[i].desc, | 270 | i++) { |
| 253 | ETH_GSTRING_LEN); | 271 | memcpy(buf, vmxnet3_tq_driver_stats[i].desc, |
| 254 | buf += ETH_GSTRING_LEN; | 272 | ETH_GSTRING_LEN); |
| 255 | } | 273 | buf += ETH_GSTRING_LEN; |
| 256 | for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_dev_stats); i++) { | 274 | } |
| 257 | memcpy(buf, vmxnet3_rq_dev_stats[i].desc, | ||
| 258 | ETH_GSTRING_LEN); | ||
| 259 | buf += ETH_GSTRING_LEN; | ||
| 260 | } | 275 | } |
| 261 | for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_driver_stats); i++) { | 276 | |
| 262 | memcpy(buf, vmxnet3_rq_driver_stats[i].desc, | 277 | for (j = 0; j < adapter->num_rx_queues; j++) { |
| 263 | ETH_GSTRING_LEN); | 278 | for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_dev_stats); i++) { |
| 264 | buf += ETH_GSTRING_LEN; | 279 | memcpy(buf, vmxnet3_rq_dev_stats[i].desc, |
| 280 | ETH_GSTRING_LEN); | ||
| 281 | buf += ETH_GSTRING_LEN; | ||
| 282 | } | ||
| 283 | for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_driver_stats); | ||
| 284 | i++) { | ||
| 285 | memcpy(buf, vmxnet3_rq_driver_stats[i].desc, | ||
| 286 | ETH_GSTRING_LEN); | ||
| 287 | buf += ETH_GSTRING_LEN; | ||
| 288 | } | ||
| 265 | } | 289 | } |
| 290 | |||
| 266 | for (i = 0; i < ARRAY_SIZE(vmxnet3_global_stats); i++) { | 291 | for (i = 0; i < ARRAY_SIZE(vmxnet3_global_stats); i++) { |
| 267 | memcpy(buf, vmxnet3_global_stats[i].desc, | 292 | memcpy(buf, vmxnet3_global_stats[i].desc, |
| 268 | ETH_GSTRING_LEN); | 293 | ETH_GSTRING_LEN); |
| @@ -277,6 +302,7 @@ vmxnet3_set_flags(struct net_device *netdev, u32 data) | |||
| 277 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 302 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 278 | u8 lro_requested = (data & ETH_FLAG_LRO) == 0 ? 0 : 1; | 303 | u8 lro_requested = (data & ETH_FLAG_LRO) == 0 ? 0 : 1; |
| 279 | u8 lro_present = (netdev->features & NETIF_F_LRO) == 0 ? 0 : 1; | 304 | u8 lro_present = (netdev->features & NETIF_F_LRO) == 0 ? 0 : 1; |
| 305 | unsigned long flags; | ||
| 280 | 306 | ||
| 281 | if (data & ~ETH_FLAG_LRO) | 307 | if (data & ~ETH_FLAG_LRO) |
| 282 | return -EOPNOTSUPP; | 308 | return -EOPNOTSUPP; |
| @@ -292,8 +318,10 @@ vmxnet3_set_flags(struct net_device *netdev, u32 data) | |||
| 292 | else | 318 | else |
| 293 | adapter->shared->devRead.misc.uptFeatures &= | 319 | adapter->shared->devRead.misc.uptFeatures &= |
| 294 | ~UPT1_F_LRO; | 320 | ~UPT1_F_LRO; |
| 321 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 295 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 322 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 296 | VMXNET3_CMD_UPDATE_FEATURE); | 323 | VMXNET3_CMD_UPDATE_FEATURE); |
| 324 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 297 | } | 325 | } |
| 298 | return 0; | 326 | return 0; |
| 299 | } | 327 | } |
| @@ -303,30 +331,41 @@ vmxnet3_get_ethtool_stats(struct net_device *netdev, | |||
| 303 | struct ethtool_stats *stats, u64 *buf) | 331 | struct ethtool_stats *stats, u64 *buf) |
| 304 | { | 332 | { |
| 305 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 333 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 334 | unsigned long flags; | ||
| 306 | u8 *base; | 335 | u8 *base; |
| 307 | int i; | 336 | int i; |
| 308 | int j = 0; | 337 | int j = 0; |
| 309 | 338 | ||
| 339 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 310 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_STATS); | 340 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_STATS); |
| 341 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 311 | 342 | ||
| 312 | /* this does assume each counter is 64-bit wide */ | 343 | /* this does assume each counter is 64-bit wide */ |
| 313 | /* TODO change this for multiple queues */ | 344 | for (j = 0; j < adapter->num_tx_queues; j++) { |
| 314 | 345 | base = (u8 *)&adapter->tqd_start[j].stats; | |
| 315 | base = (u8 *)&adapter->tqd_start[j].stats; | 346 | *buf++ = (u64)j; |
| 316 | for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_dev_stats); i++) | 347 | for (i = 1; i < ARRAY_SIZE(vmxnet3_tq_dev_stats); i++) |
| 317 | *buf++ = *(u64 *)(base + vmxnet3_tq_dev_stats[i].offset); | 348 | *buf++ = *(u64 *)(base + |
| 318 | 349 | vmxnet3_tq_dev_stats[i].offset); | |
| 319 | base = (u8 *)&adapter->tx_queue[j].stats; | 350 | |
| 320 | for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_driver_stats); i++) | 351 | base = (u8 *)&adapter->tx_queue[j].stats; |
| 321 | *buf++ = *(u64 *)(base + vmxnet3_tq_driver_stats[i].offset); | 352 | for (i = 0; i < ARRAY_SIZE(vmxnet3_tq_driver_stats); i++) |
| 322 | 353 | *buf++ = *(u64 *)(base + | |
| 323 | base = (u8 *)&adapter->rqd_start[j].stats; | 354 | vmxnet3_tq_driver_stats[i].offset); |
| 324 | for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_dev_stats); i++) | 355 | } |
| 325 | *buf++ = *(u64 *)(base + vmxnet3_rq_dev_stats[i].offset); | ||
| 326 | 356 | ||
| 327 | base = (u8 *)&adapter->rx_queue[j].stats; | 357 | for (j = 0; j < adapter->num_tx_queues; j++) { |
| 328 | for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_driver_stats); i++) | 358 | base = (u8 *)&adapter->rqd_start[j].stats; |
| 329 | *buf++ = *(u64 *)(base + vmxnet3_rq_driver_stats[i].offset); | 359 | *buf++ = (u64) j; |
| 360 | for (i = 1; i < ARRAY_SIZE(vmxnet3_rq_dev_stats); i++) | ||
| 361 | *buf++ = *(u64 *)(base + | ||
| 362 | vmxnet3_rq_dev_stats[i].offset); | ||
| 363 | |||
| 364 | base = (u8 *)&adapter->rx_queue[j].stats; | ||
| 365 | for (i = 0; i < ARRAY_SIZE(vmxnet3_rq_driver_stats); i++) | ||
| 366 | *buf++ = *(u64 *)(base + | ||
| 367 | vmxnet3_rq_driver_stats[i].offset); | ||
| 368 | } | ||
| 330 | 369 | ||
| 331 | base = (u8 *)adapter; | 370 | base = (u8 *)adapter; |
| 332 | for (i = 0; i < ARRAY_SIZE(vmxnet3_global_stats); i++) | 371 | for (i = 0; i < ARRAY_SIZE(vmxnet3_global_stats); i++) |
| @@ -339,7 +378,7 @@ vmxnet3_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p) | |||
| 339 | { | 378 | { |
| 340 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 379 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 341 | u32 *buf = p; | 380 | u32 *buf = p; |
| 342 | int i = 0; | 381 | int i = 0, j = 0; |
| 343 | 382 | ||
| 344 | memset(p, 0, vmxnet3_get_regs_len(netdev)); | 383 | memset(p, 0, vmxnet3_get_regs_len(netdev)); |
| 345 | 384 | ||
| @@ -348,31 +387,35 @@ vmxnet3_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p) | |||
| 348 | /* Update vmxnet3_get_regs_len if we want to dump more registers */ | 387 | /* Update vmxnet3_get_regs_len if we want to dump more registers */ |
| 349 | 388 | ||
| 350 | /* make each ring use multiple of 16 bytes */ | 389 | /* make each ring use multiple of 16 bytes */ |
| 351 | /* TODO change this for multiple queues */ | 390 | for (i = 0; i < adapter->num_tx_queues; i++) { |
| 352 | buf[0] = adapter->tx_queue[i].tx_ring.next2fill; | 391 | buf[j++] = adapter->tx_queue[i].tx_ring.next2fill; |
| 353 | buf[1] = adapter->tx_queue[i].tx_ring.next2comp; | 392 | buf[j++] = adapter->tx_queue[i].tx_ring.next2comp; |
| 354 | buf[2] = adapter->tx_queue[i].tx_ring.gen; | 393 | buf[j++] = adapter->tx_queue[i].tx_ring.gen; |
| 355 | buf[3] = 0; | 394 | buf[j++] = 0; |
| 356 | 395 | ||
| 357 | buf[4] = adapter->tx_queue[i].comp_ring.next2proc; | 396 | buf[j++] = adapter->tx_queue[i].comp_ring.next2proc; |
| 358 | buf[5] = adapter->tx_queue[i].comp_ring.gen; | 397 | buf[j++] = adapter->tx_queue[i].comp_ring.gen; |
| 359 | buf[6] = adapter->tx_queue[i].stopped; | 398 | buf[j++] = adapter->tx_queue[i].stopped; |
| 360 | buf[7] = 0; | 399 | buf[j++] = 0; |
| 361 | 400 | } | |
| 362 | buf[8] = adapter->rx_queue[i].rx_ring[0].next2fill; | 401 | |
| 363 | buf[9] = adapter->rx_queue[i].rx_ring[0].next2comp; | 402 | for (i = 0; i < adapter->num_rx_queues; i++) { |
| 364 | buf[10] = adapter->rx_queue[i].rx_ring[0].gen; | 403 | buf[j++] = adapter->rx_queue[i].rx_ring[0].next2fill; |
| 365 | buf[11] = 0; | 404 | buf[j++] = adapter->rx_queue[i].rx_ring[0].next2comp; |
| 366 | 405 | buf[j++] = adapter->rx_queue[i].rx_ring[0].gen; | |
| 367 | buf[12] = adapter->rx_queue[i].rx_ring[1].next2fill; | 406 | buf[j++] = 0; |
| 368 | buf[13] = adapter->rx_queue[i].rx_ring[1].next2comp; | 407 | |
| 369 | buf[14] = adapter->rx_queue[i].rx_ring[1].gen; | 408 | buf[j++] = adapter->rx_queue[i].rx_ring[1].next2fill; |
| 370 | buf[15] = 0; | 409 | buf[j++] = adapter->rx_queue[i].rx_ring[1].next2comp; |
| 371 | 410 | buf[j++] = adapter->rx_queue[i].rx_ring[1].gen; | |
| 372 | buf[16] = adapter->rx_queue[i].comp_ring.next2proc; | 411 | buf[j++] = 0; |
| 373 | buf[17] = adapter->rx_queue[i].comp_ring.gen; | 412 | |
| 374 | buf[18] = 0; | 413 | buf[j++] = adapter->rx_queue[i].comp_ring.next2proc; |
| 375 | buf[19] = 0; | 414 | buf[j++] = adapter->rx_queue[i].comp_ring.gen; |
| 415 | buf[j++] = 0; | ||
| 416 | buf[j++] = 0; | ||
| 417 | } | ||
| 418 | |||
| 376 | } | 419 | } |
| 377 | 420 | ||
| 378 | 421 | ||
| @@ -574,6 +617,7 @@ vmxnet3_set_rss_indir(struct net_device *netdev, | |||
| 574 | const struct ethtool_rxfh_indir *p) | 617 | const struct ethtool_rxfh_indir *p) |
| 575 | { | 618 | { |
| 576 | unsigned int i; | 619 | unsigned int i; |
| 620 | unsigned long flags; | ||
| 577 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); | 621 | struct vmxnet3_adapter *adapter = netdev_priv(netdev); |
| 578 | struct UPT1_RSSConf *rssConf = adapter->rss_conf; | 622 | struct UPT1_RSSConf *rssConf = adapter->rss_conf; |
| 579 | 623 | ||
| @@ -592,8 +636,10 @@ vmxnet3_set_rss_indir(struct net_device *netdev, | |||
| 592 | for (i = 0; i < rssConf->indTableSize; i++) | 636 | for (i = 0; i < rssConf->indTableSize; i++) |
| 593 | rssConf->indTable[i] = p->ring_index[i]; | 637 | rssConf->indTable[i] = p->ring_index[i]; |
| 594 | 638 | ||
| 639 | spin_lock_irqsave(&adapter->cmd_lock, flags); | ||
| 595 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, | 640 | VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, |
| 596 | VMXNET3_CMD_UPDATE_RSSIDT); | 641 | VMXNET3_CMD_UPDATE_RSSIDT); |
| 642 | spin_unlock_irqrestore(&adapter->cmd_lock, flags); | ||
| 597 | 643 | ||
| 598 | return 0; | 644 | return 0; |
| 599 | 645 | ||
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h index 7fadeed37f0..fb5d245ac87 100644 --- a/drivers/net/vmxnet3/vmxnet3_int.h +++ b/drivers/net/vmxnet3/vmxnet3_int.h | |||
| @@ -68,10 +68,10 @@ | |||
| 68 | /* | 68 | /* |
| 69 | * Version numbers | 69 | * Version numbers |
| 70 | */ | 70 | */ |
| 71 | #define VMXNET3_DRIVER_VERSION_STRING "1.0.16.0-k" | 71 | #define VMXNET3_DRIVER_VERSION_STRING "1.0.25.0-k" |
| 72 | 72 | ||
| 73 | /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */ | 73 | /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */ |
| 74 | #define VMXNET3_DRIVER_VERSION_NUM 0x01001000 | 74 | #define VMXNET3_DRIVER_VERSION_NUM 0x01001900 |
| 75 | 75 | ||
| 76 | #if defined(CONFIG_PCI_MSI) | 76 | #if defined(CONFIG_PCI_MSI) |
| 77 | /* RSS only makes sense if MSI-X is supported. */ | 77 | /* RSS only makes sense if MSI-X is supported. */ |
| @@ -289,7 +289,7 @@ struct vmxnet3_rx_queue { | |||
| 289 | 289 | ||
| 290 | #define VMXNET3_LINUX_MAX_MSIX_VECT (VMXNET3_DEVICE_MAX_TX_QUEUES + \ | 290 | #define VMXNET3_LINUX_MAX_MSIX_VECT (VMXNET3_DEVICE_MAX_TX_QUEUES + \ |
| 291 | VMXNET3_DEVICE_MAX_RX_QUEUES + 1) | 291 | VMXNET3_DEVICE_MAX_RX_QUEUES + 1) |
| 292 | #define VMXNET3_LINUX_MIN_MSIX_VECT 3 /* 1 for each : tx, rx and event */ | 292 | #define VMXNET3_LINUX_MIN_MSIX_VECT 2 /* 1 for tx-rx pair and 1 for event */ |
| 293 | 293 | ||
| 294 | 294 | ||
| 295 | struct vmxnet3_intr { | 295 | struct vmxnet3_intr { |
| @@ -317,6 +317,7 @@ struct vmxnet3_adapter { | |||
| 317 | struct vmxnet3_rx_queue rx_queue[VMXNET3_DEVICE_MAX_RX_QUEUES]; | 317 | struct vmxnet3_rx_queue rx_queue[VMXNET3_DEVICE_MAX_RX_QUEUES]; |
| 318 | struct vlan_group *vlan_grp; | 318 | struct vlan_group *vlan_grp; |
| 319 | struct vmxnet3_intr intr; | 319 | struct vmxnet3_intr intr; |
| 320 | spinlock_t cmd_lock; | ||
| 320 | struct Vmxnet3_DriverShared *shared; | 321 | struct Vmxnet3_DriverShared *shared; |
| 321 | struct Vmxnet3_PMConf *pm_conf; | 322 | struct Vmxnet3_PMConf *pm_conf; |
| 322 | struct Vmxnet3_TxQueueDesc *tqd_start; /* all tx queue desc */ | 323 | struct Vmxnet3_TxQueueDesc *tqd_start; /* all tx queue desc */ |
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index 019a74d533a..09ae4ef0fd5 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c | |||
| @@ -2294,6 +2294,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work) | |||
| 2294 | int i; | 2294 | int i; |
| 2295 | bool needreset = false; | 2295 | bool needreset = false; |
| 2296 | 2296 | ||
| 2297 | mutex_lock(&sc->lock); | ||
| 2298 | |||
| 2297 | for (i = 0; i < ARRAY_SIZE(sc->txqs); i++) { | 2299 | for (i = 0; i < ARRAY_SIZE(sc->txqs); i++) { |
| 2298 | if (sc->txqs[i].setup) { | 2300 | if (sc->txqs[i].setup) { |
| 2299 | txq = &sc->txqs[i]; | 2301 | txq = &sc->txqs[i]; |
| @@ -2321,6 +2323,8 @@ ath5k_tx_complete_poll_work(struct work_struct *work) | |||
| 2321 | ath5k_reset(sc, NULL, true); | 2323 | ath5k_reset(sc, NULL, true); |
| 2322 | } | 2324 | } |
| 2323 | 2325 | ||
| 2326 | mutex_unlock(&sc->lock); | ||
| 2327 | |||
| 2324 | ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, | 2328 | ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work, |
| 2325 | msecs_to_jiffies(ATH5K_TX_COMPLETE_POLL_INT)); | 2329 | msecs_to_jiffies(ATH5K_TX_COMPLETE_POLL_INT)); |
| 2326 | } | 2330 | } |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_calib.c b/drivers/net/wireless/ath/ath9k/ar9002_calib.c index ea2e7d714bd..5e300bd3d26 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c | |||
| @@ -679,10 +679,6 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah, | |||
| 679 | 679 | ||
| 680 | /* Do NF cal only at longer intervals */ | 680 | /* Do NF cal only at longer intervals */ |
| 681 | if (longcal || nfcal_pending) { | 681 | if (longcal || nfcal_pending) { |
| 682 | /* Do periodic PAOffset Cal */ | ||
| 683 | ar9002_hw_pa_cal(ah, false); | ||
| 684 | ar9002_hw_olc_temp_compensation(ah); | ||
| 685 | |||
| 686 | /* | 682 | /* |
| 687 | * Get the value from the previous NF cal and update | 683 | * Get the value from the previous NF cal and update |
| 688 | * history buffer. | 684 | * history buffer. |
| @@ -697,8 +693,12 @@ static bool ar9002_hw_calibrate(struct ath_hw *ah, | |||
| 697 | ath9k_hw_loadnf(ah, ah->curchan); | 693 | ath9k_hw_loadnf(ah, ah->curchan); |
| 698 | } | 694 | } |
| 699 | 695 | ||
| 700 | if (longcal) | 696 | if (longcal) { |
| 701 | ath9k_hw_start_nfcal(ah, false); | 697 | ath9k_hw_start_nfcal(ah, false); |
| 698 | /* Do periodic PAOffset Cal */ | ||
| 699 | ar9002_hw_pa_cal(ah, false); | ||
| 700 | ar9002_hw_olc_temp_compensation(ah); | ||
| 701 | } | ||
| 702 | } | 702 | } |
| 703 | 703 | ||
| 704 | return iscaldone; | 704 | return iscaldone; |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h index 81f9cf294de..9ecca93392e 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h +++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h | |||
| @@ -1842,7 +1842,7 @@ static const u32 ar9300_2p2_soc_preamble[][2] = { | |||
| 1842 | 1842 | ||
| 1843 | static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2[][2] = { | 1843 | static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2[][2] = { |
| 1844 | /* Addr allmodes */ | 1844 | /* Addr allmodes */ |
| 1845 | {0x00004040, 0x08212e5e}, | 1845 | {0x00004040, 0x0821265e}, |
| 1846 | {0x00004040, 0x0008003b}, | 1846 | {0x00004040, 0x0008003b}, |
| 1847 | {0x00004044, 0x00000000}, | 1847 | {0x00004044, 0x00000000}, |
| 1848 | }; | 1848 | }; |
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c index 6137634e46c..06fb2c85053 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c | |||
| @@ -146,8 +146,8 @@ static void ar9003_hw_init_mode_regs(struct ath_hw *ah) | |||
| 146 | /* Sleep Setting */ | 146 | /* Sleep Setting */ |
| 147 | 147 | ||
| 148 | INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower, | 148 | INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower, |
| 149 | ar9300PciePhy_clkreq_enable_L1_2p2, | 149 | ar9300PciePhy_pll_on_clkreq_disable_L1_2p2, |
| 150 | ARRAY_SIZE(ar9300PciePhy_clkreq_enable_L1_2p2), | 150 | ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p2), |
| 151 | 2); | 151 | 2); |
| 152 | 152 | ||
| 153 | /* Fast clock modal settings */ | 153 | /* Fast clock modal settings */ |
diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h index 1ce506f2311..780ac5eac50 100644 --- a/drivers/net/wireless/ath/ath9k/htc.h +++ b/drivers/net/wireless/ath/ath9k/htc.h | |||
| @@ -78,7 +78,7 @@ struct tx_frame_hdr { | |||
| 78 | u8 node_idx; | 78 | u8 node_idx; |
| 79 | u8 vif_idx; | 79 | u8 vif_idx; |
| 80 | u8 tidno; | 80 | u8 tidno; |
| 81 | u32 flags; /* ATH9K_HTC_TX_* */ | 81 | __be32 flags; /* ATH9K_HTC_TX_* */ |
| 82 | u8 key_type; | 82 | u8 key_type; |
| 83 | u8 keyix; | 83 | u8 keyix; |
| 84 | u8 reserved[26]; | 84 | u8 reserved[26]; |
diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c index 33f36029fa4..7a5ffca2195 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_txrx.c | |||
| @@ -113,6 +113,7 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) | |||
| 113 | 113 | ||
| 114 | if (ieee80211_is_data(fc)) { | 114 | if (ieee80211_is_data(fc)) { |
| 115 | struct tx_frame_hdr tx_hdr; | 115 | struct tx_frame_hdr tx_hdr; |
| 116 | u32 flags = 0; | ||
| 116 | u8 *qc; | 117 | u8 *qc; |
| 117 | 118 | ||
| 118 | memset(&tx_hdr, 0, sizeof(struct tx_frame_hdr)); | 119 | memset(&tx_hdr, 0, sizeof(struct tx_frame_hdr)); |
| @@ -136,13 +137,14 @@ int ath9k_htc_tx_start(struct ath9k_htc_priv *priv, struct sk_buff *skb) | |||
| 136 | /* Check for RTS protection */ | 137 | /* Check for RTS protection */ |
| 137 | if (priv->hw->wiphy->rts_threshold != (u32) -1) | 138 | if (priv->hw->wiphy->rts_threshold != (u32) -1) |
| 138 | if (skb->len > priv->hw->wiphy->rts_threshold) | 139 | if (skb->len > priv->hw->wiphy->rts_threshold) |
| 139 | tx_hdr.flags |= ATH9K_HTC_TX_RTSCTS; | 140 | flags |= ATH9K_HTC_TX_RTSCTS; |
| 140 | 141 | ||
| 141 | /* CTS-to-self */ | 142 | /* CTS-to-self */ |
| 142 | if (!(tx_hdr.flags & ATH9K_HTC_TX_RTSCTS) && | 143 | if (!(flags & ATH9K_HTC_TX_RTSCTS) && |
| 143 | (priv->op_flags & OP_PROTECT_ENABLE)) | 144 | (priv->op_flags & OP_PROTECT_ENABLE)) |
| 144 | tx_hdr.flags |= ATH9K_HTC_TX_CTSONLY; | 145 | flags |= ATH9K_HTC_TX_CTSONLY; |
| 145 | 146 | ||
| 147 | tx_hdr.flags = cpu_to_be32(flags); | ||
| 146 | tx_hdr.key_type = ath9k_cmn_get_hw_crypto_keytype(skb); | 148 | tx_hdr.key_type = ath9k_cmn_get_hw_crypto_keytype(skb); |
| 147 | if (tx_hdr.key_type == ATH9K_KEY_TYPE_CLEAR) | 149 | if (tx_hdr.key_type == ATH9K_KEY_TYPE_CLEAR) |
| 148 | tx_hdr.keyix = (u8) ATH9K_TXKEYIX_INVALID; | 150 | tx_hdr.keyix = (u8) ATH9K_TXKEYIX_INVALID; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c b/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c index 97906dd442e..14ceb4df72f 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-eeprom.c | |||
| @@ -168,7 +168,7 @@ int iwl_eeprom_check_sku(struct iwl_priv *priv) | |||
| 168 | /* not using .cfg overwrite */ | 168 | /* not using .cfg overwrite */ |
| 169 | radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG); | 169 | radio_cfg = iwl_eeprom_query16(priv, EEPROM_RADIO_CONFIG); |
| 170 | priv->cfg->valid_tx_ant = EEPROM_RF_CFG_TX_ANT_MSK(radio_cfg); | 170 | priv->cfg->valid_tx_ant = EEPROM_RF_CFG_TX_ANT_MSK(radio_cfg); |
| 171 | priv->cfg->valid_rx_ant = EEPROM_RF_CFG_TX_ANT_MSK(radio_cfg); | 171 | priv->cfg->valid_rx_ant = EEPROM_RF_CFG_RX_ANT_MSK(radio_cfg); |
| 172 | if (!priv->cfg->valid_tx_ant || !priv->cfg->valid_rx_ant) { | 172 | if (!priv->cfg->valid_tx_ant || !priv->cfg->valid_rx_ant) { |
| 173 | IWL_ERR(priv, "Invalid chain (0X%x, 0X%x)\n", | 173 | IWL_ERR(priv, "Invalid chain (0X%x, 0X%x)\n", |
| 174 | priv->cfg->valid_tx_ant, | 174 | priv->cfg->valid_tx_ant, |
diff --git a/drivers/net/wireless/iwmc3200wifi/netdev.c b/drivers/net/wireless/iwmc3200wifi/netdev.c index 13a69ebf2a9..5091d77e02c 100644 --- a/drivers/net/wireless/iwmc3200wifi/netdev.c +++ b/drivers/net/wireless/iwmc3200wifi/netdev.c | |||
| @@ -126,6 +126,7 @@ void *iwm_if_alloc(int sizeof_bus, struct device *dev, | |||
| 126 | ndev = alloc_netdev_mq(0, "wlan%d", ether_setup, IWM_TX_QUEUES); | 126 | ndev = alloc_netdev_mq(0, "wlan%d", ether_setup, IWM_TX_QUEUES); |
| 127 | if (!ndev) { | 127 | if (!ndev) { |
| 128 | dev_err(dev, "no memory for network device instance\n"); | 128 | dev_err(dev, "no memory for network device instance\n"); |
| 129 | ret = -ENOMEM; | ||
| 129 | goto out_priv; | 130 | goto out_priv; |
| 130 | } | 131 | } |
| 131 | 132 | ||
| @@ -138,6 +139,7 @@ void *iwm_if_alloc(int sizeof_bus, struct device *dev, | |||
| 138 | GFP_KERNEL); | 139 | GFP_KERNEL); |
| 139 | if (!iwm->umac_profile) { | 140 | if (!iwm->umac_profile) { |
| 140 | dev_err(dev, "Couldn't alloc memory for profile\n"); | 141 | dev_err(dev, "Couldn't alloc memory for profile\n"); |
| 142 | ret = -ENOMEM; | ||
| 141 | goto out_profile; | 143 | goto out_profile; |
| 142 | } | 144 | } |
| 143 | 145 | ||
diff --git a/drivers/net/wireless/rt2x00/rt2x00firmware.c b/drivers/net/wireless/rt2x00/rt2x00firmware.c index f0e1eb72bef..be0ff78c1b1 100644 --- a/drivers/net/wireless/rt2x00/rt2x00firmware.c +++ b/drivers/net/wireless/rt2x00/rt2x00firmware.c | |||
| @@ -58,6 +58,7 @@ static int rt2x00lib_request_firmware(struct rt2x00_dev *rt2x00dev) | |||
| 58 | 58 | ||
| 59 | if (!fw || !fw->size || !fw->data) { | 59 | if (!fw || !fw->size || !fw->data) { |
| 60 | ERROR(rt2x00dev, "Failed to read Firmware.\n"); | 60 | ERROR(rt2x00dev, "Failed to read Firmware.\n"); |
| 61 | release_firmware(fw); | ||
| 61 | return -ENOENT; | 62 | return -ENOENT; |
| 62 | } | 63 | } |
| 63 | 64 | ||
diff --git a/drivers/s390/net/qeth_l2_main.c b/drivers/s390/net/qeth_l2_main.c index 7a7a1b66478..2ac8f6aff5a 100644 --- a/drivers/s390/net/qeth_l2_main.c +++ b/drivers/s390/net/qeth_l2_main.c | |||
| @@ -831,12 +831,14 @@ tx_drop: | |||
| 831 | return NETDEV_TX_OK; | 831 | return NETDEV_TX_OK; |
| 832 | } | 832 | } |
| 833 | 833 | ||
| 834 | static int qeth_l2_open(struct net_device *dev) | 834 | static int __qeth_l2_open(struct net_device *dev) |
| 835 | { | 835 | { |
| 836 | struct qeth_card *card = dev->ml_priv; | 836 | struct qeth_card *card = dev->ml_priv; |
| 837 | int rc = 0; | 837 | int rc = 0; |
| 838 | 838 | ||
| 839 | QETH_CARD_TEXT(card, 4, "qethopen"); | 839 | QETH_CARD_TEXT(card, 4, "qethopen"); |
| 840 | if (card->state == CARD_STATE_UP) | ||
| 841 | return rc; | ||
| 840 | if (card->state != CARD_STATE_SOFTSETUP) | 842 | if (card->state != CARD_STATE_SOFTSETUP) |
| 841 | return -ENODEV; | 843 | return -ENODEV; |
| 842 | 844 | ||
| @@ -857,6 +859,18 @@ static int qeth_l2_open(struct net_device *dev) | |||
| 857 | return rc; | 859 | return rc; |
| 858 | } | 860 | } |
| 859 | 861 | ||
| 862 | static int qeth_l2_open(struct net_device *dev) | ||
| 863 | { | ||
| 864 | struct qeth_card *card = dev->ml_priv; | ||
| 865 | |||
| 866 | QETH_CARD_TEXT(card, 5, "qethope_"); | ||
| 867 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { | ||
| 868 | QETH_CARD_TEXT(card, 3, "openREC"); | ||
| 869 | return -ERESTARTSYS; | ||
| 870 | } | ||
| 871 | return __qeth_l2_open(dev); | ||
| 872 | } | ||
| 873 | |||
| 860 | static int qeth_l2_stop(struct net_device *dev) | 874 | static int qeth_l2_stop(struct net_device *dev) |
| 861 | { | 875 | { |
| 862 | struct qeth_card *card = dev->ml_priv; | 876 | struct qeth_card *card = dev->ml_priv; |
| @@ -1046,7 +1060,7 @@ contin: | |||
| 1046 | if (recover_flag == CARD_STATE_RECOVER) { | 1060 | if (recover_flag == CARD_STATE_RECOVER) { |
| 1047 | if (recovery_mode && | 1061 | if (recovery_mode && |
| 1048 | card->info.type != QETH_CARD_TYPE_OSN) { | 1062 | card->info.type != QETH_CARD_TYPE_OSN) { |
| 1049 | qeth_l2_open(card->dev); | 1063 | __qeth_l2_open(card->dev); |
| 1050 | } else { | 1064 | } else { |
| 1051 | rtnl_lock(); | 1065 | rtnl_lock(); |
| 1052 | dev_open(card->dev); | 1066 | dev_open(card->dev); |
diff --git a/drivers/s390/net/qeth_l3_main.c b/drivers/s390/net/qeth_l3_main.c index e227e465bfc..d09b0c44fc3 100644 --- a/drivers/s390/net/qeth_l3_main.c +++ b/drivers/s390/net/qeth_l3_main.c | |||
| @@ -2998,7 +2998,9 @@ static inline void qeth_l3_hdr_csum(struct qeth_card *card, | |||
| 2998 | */ | 2998 | */ |
| 2999 | if (iph->protocol == IPPROTO_UDP) | 2999 | if (iph->protocol == IPPROTO_UDP) |
| 3000 | hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_UDP; | 3000 | hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_UDP; |
| 3001 | hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_CSUM_TRANSP_REQ; | 3001 | hdr->hdr.l3.ext_flags |= QETH_HDR_EXT_CSUM_TRANSP_REQ | |
| 3002 | QETH_HDR_EXT_CSUM_HDR_REQ; | ||
| 3003 | iph->check = 0; | ||
| 3002 | if (card->options.performance_stats) | 3004 | if (card->options.performance_stats) |
| 3003 | card->perf_stats.tx_csum++; | 3005 | card->perf_stats.tx_csum++; |
| 3004 | } | 3006 | } |
| @@ -3240,12 +3242,14 @@ tx_drop: | |||
| 3240 | return NETDEV_TX_OK; | 3242 | return NETDEV_TX_OK; |
| 3241 | } | 3243 | } |
| 3242 | 3244 | ||
| 3243 | static int qeth_l3_open(struct net_device *dev) | 3245 | static int __qeth_l3_open(struct net_device *dev) |
| 3244 | { | 3246 | { |
| 3245 | struct qeth_card *card = dev->ml_priv; | 3247 | struct qeth_card *card = dev->ml_priv; |
| 3246 | int rc = 0; | 3248 | int rc = 0; |
| 3247 | 3249 | ||
| 3248 | QETH_CARD_TEXT(card, 4, "qethopen"); | 3250 | QETH_CARD_TEXT(card, 4, "qethopen"); |
| 3251 | if (card->state == CARD_STATE_UP) | ||
| 3252 | return rc; | ||
| 3249 | if (card->state != CARD_STATE_SOFTSETUP) | 3253 | if (card->state != CARD_STATE_SOFTSETUP) |
| 3250 | return -ENODEV; | 3254 | return -ENODEV; |
| 3251 | card->data.state = CH_STATE_UP; | 3255 | card->data.state = CH_STATE_UP; |
| @@ -3260,6 +3264,18 @@ static int qeth_l3_open(struct net_device *dev) | |||
| 3260 | return rc; | 3264 | return rc; |
| 3261 | } | 3265 | } |
| 3262 | 3266 | ||
| 3267 | static int qeth_l3_open(struct net_device *dev) | ||
| 3268 | { | ||
| 3269 | struct qeth_card *card = dev->ml_priv; | ||
| 3270 | |||
| 3271 | QETH_CARD_TEXT(card, 5, "qethope_"); | ||
| 3272 | if (qeth_wait_for_threads(card, QETH_RECOVER_THREAD)) { | ||
| 3273 | QETH_CARD_TEXT(card, 3, "openREC"); | ||
| 3274 | return -ERESTARTSYS; | ||
| 3275 | } | ||
| 3276 | return __qeth_l3_open(dev); | ||
| 3277 | } | ||
| 3278 | |||
| 3263 | static int qeth_l3_stop(struct net_device *dev) | 3279 | static int qeth_l3_stop(struct net_device *dev) |
| 3264 | { | 3280 | { |
| 3265 | struct qeth_card *card = dev->ml_priv; | 3281 | struct qeth_card *card = dev->ml_priv; |
| @@ -3564,7 +3580,7 @@ contin: | |||
| 3564 | netif_carrier_off(card->dev); | 3580 | netif_carrier_off(card->dev); |
| 3565 | if (recover_flag == CARD_STATE_RECOVER) { | 3581 | if (recover_flag == CARD_STATE_RECOVER) { |
| 3566 | if (recovery_mode) | 3582 | if (recovery_mode) |
| 3567 | qeth_l3_open(card->dev); | 3583 | __qeth_l3_open(card->dev); |
| 3568 | else { | 3584 | else { |
| 3569 | rtnl_lock(); | 3585 | rtnl_lock(); |
| 3570 | dev_open(card->dev); | 3586 | dev_open(card->dev); |
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index ef8d9d558fc..4fb5b2bf234 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c | |||
| @@ -96,11 +96,6 @@ static struct pci_device_id virtio_pci_id_table[] = { | |||
| 96 | 96 | ||
| 97 | MODULE_DEVICE_TABLE(pci, virtio_pci_id_table); | 97 | MODULE_DEVICE_TABLE(pci, virtio_pci_id_table); |
| 98 | 98 | ||
| 99 | /* A PCI device has it's own struct device and so does a virtio device so | ||
| 100 | * we create a place for the virtio devices to show up in sysfs. I think it | ||
| 101 | * would make more sense for virtio to not insist on having it's own device. */ | ||
| 102 | static struct device *virtio_pci_root; | ||
| 103 | |||
| 104 | /* Convert a generic virtio device to our structure */ | 99 | /* Convert a generic virtio device to our structure */ |
| 105 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) | 100 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) |
| 106 | { | 101 | { |
| @@ -629,7 +624,7 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev, | |||
| 629 | if (vp_dev == NULL) | 624 | if (vp_dev == NULL) |
| 630 | return -ENOMEM; | 625 | return -ENOMEM; |
| 631 | 626 | ||
| 632 | vp_dev->vdev.dev.parent = virtio_pci_root; | 627 | vp_dev->vdev.dev.parent = &pci_dev->dev; |
| 633 | vp_dev->vdev.dev.release = virtio_pci_release_dev; | 628 | vp_dev->vdev.dev.release = virtio_pci_release_dev; |
| 634 | vp_dev->vdev.config = &virtio_pci_config_ops; | 629 | vp_dev->vdev.config = &virtio_pci_config_ops; |
| 635 | vp_dev->pci_dev = pci_dev; | 630 | vp_dev->pci_dev = pci_dev; |
| @@ -717,17 +712,7 @@ static struct pci_driver virtio_pci_driver = { | |||
| 717 | 712 | ||
| 718 | static int __init virtio_pci_init(void) | 713 | static int __init virtio_pci_init(void) |
| 719 | { | 714 | { |
| 720 | int err; | 715 | return pci_register_driver(&virtio_pci_driver); |
| 721 | |||
| 722 | virtio_pci_root = root_device_register("virtio-pci"); | ||
| 723 | if (IS_ERR(virtio_pci_root)) | ||
| 724 | return PTR_ERR(virtio_pci_root); | ||
| 725 | |||
| 726 | err = pci_register_driver(&virtio_pci_driver); | ||
| 727 | if (err) | ||
| 728 | root_device_unregister(virtio_pci_root); | ||
| 729 | |||
| 730 | return err; | ||
| 731 | } | 716 | } |
| 732 | 717 | ||
| 733 | module_init(virtio_pci_init); | 718 | module_init(virtio_pci_init); |
| @@ -735,7 +720,6 @@ module_init(virtio_pci_init); | |||
| 735 | static void __exit virtio_pci_exit(void) | 720 | static void __exit virtio_pci_exit(void) |
| 736 | { | 721 | { |
| 737 | pci_unregister_driver(&virtio_pci_driver); | 722 | pci_unregister_driver(&virtio_pci_driver); |
| 738 | root_device_unregister(virtio_pci_root); | ||
| 739 | } | 723 | } |
| 740 | 724 | ||
| 741 | module_exit(virtio_pci_exit); | 725 | module_exit(virtio_pci_exit); |
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c index 2232b3c780b..7aa7d4f8984 100644 --- a/fs/gfs2/inode.c +++ b/fs/gfs2/inode.c | |||
| @@ -74,16 +74,14 @@ static struct inode *gfs2_iget(struct super_block *sb, u64 no_addr) | |||
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | /** | 76 | /** |
| 77 | * GFS2 lookup code fills in vfs inode contents based on info obtained | 77 | * gfs2_set_iop - Sets inode operations |
| 78 | * from directory entry inside gfs2_inode_lookup(). This has caused issues | 78 | * @inode: The inode with correct i_mode filled in |
| 79 | * with NFS code path since its get_dentry routine doesn't have the relevant | ||
| 80 | * directory entry when gfs2_inode_lookup() is invoked. Part of the code | ||
| 81 | * segment inside gfs2_inode_lookup code needs to get moved around. | ||
| 82 | * | 79 | * |
| 83 | * Clears I_NEW as well. | 80 | * GFS2 lookup code fills in vfs inode contents based on info obtained |
| 84 | **/ | 81 | * from directory entry inside gfs2_inode_lookup(). |
| 82 | */ | ||
| 85 | 83 | ||
| 86 | void gfs2_set_iop(struct inode *inode) | 84 | static void gfs2_set_iop(struct inode *inode) |
| 87 | { | 85 | { |
| 88 | struct gfs2_sbd *sdp = GFS2_SB(inode); | 86 | struct gfs2_sbd *sdp = GFS2_SB(inode); |
| 89 | umode_t mode = inode->i_mode; | 87 | umode_t mode = inode->i_mode; |
| @@ -106,8 +104,6 @@ void gfs2_set_iop(struct inode *inode) | |||
| 106 | inode->i_op = &gfs2_file_iops; | 104 | inode->i_op = &gfs2_file_iops; |
| 107 | init_special_inode(inode, inode->i_mode, inode->i_rdev); | 105 | init_special_inode(inode, inode->i_mode, inode->i_rdev); |
| 108 | } | 106 | } |
| 109 | |||
| 110 | unlock_new_inode(inode); | ||
| 111 | } | 107 | } |
| 112 | 108 | ||
| 113 | /** | 109 | /** |
| @@ -119,10 +115,8 @@ void gfs2_set_iop(struct inode *inode) | |||
| 119 | * Returns: A VFS inode, or an error | 115 | * Returns: A VFS inode, or an error |
| 120 | */ | 116 | */ |
| 121 | 117 | ||
| 122 | struct inode *gfs2_inode_lookup(struct super_block *sb, | 118 | struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned int type, |
| 123 | unsigned int type, | 119 | u64 no_addr, u64 no_formal_ino) |
| 124 | u64 no_addr, | ||
| 125 | u64 no_formal_ino) | ||
| 126 | { | 120 | { |
| 127 | struct inode *inode; | 121 | struct inode *inode; |
| 128 | struct gfs2_inode *ip; | 122 | struct gfs2_inode *ip; |
| @@ -152,51 +146,37 @@ struct inode *gfs2_inode_lookup(struct super_block *sb, | |||
| 152 | error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh); | 146 | error = gfs2_glock_nq_init(io_gl, LM_ST_SHARED, GL_EXACT, &ip->i_iopen_gh); |
| 153 | if (unlikely(error)) | 147 | if (unlikely(error)) |
| 154 | goto fail_iopen; | 148 | goto fail_iopen; |
| 155 | ip->i_iopen_gh.gh_gl->gl_object = ip; | ||
| 156 | 149 | ||
| 150 | ip->i_iopen_gh.gh_gl->gl_object = ip; | ||
| 157 | gfs2_glock_put(io_gl); | 151 | gfs2_glock_put(io_gl); |
| 158 | io_gl = NULL; | 152 | io_gl = NULL; |
| 159 | 153 | ||
| 160 | if ((type == DT_UNKNOWN) && (no_formal_ino == 0)) | ||
| 161 | goto gfs2_nfsbypass; | ||
| 162 | |||
| 163 | inode->i_mode = DT2IF(type); | ||
| 164 | |||
| 165 | /* | ||
| 166 | * We must read the inode in order to work out its type in | ||
| 167 | * this case. Note that this doesn't happen often as we normally | ||
| 168 | * know the type beforehand. This code path only occurs during | ||
| 169 | * unlinked inode recovery (where it is safe to do this glock, | ||
| 170 | * which is not true in the general case). | ||
| 171 | */ | ||
| 172 | if (type == DT_UNKNOWN) { | 154 | if (type == DT_UNKNOWN) { |
| 173 | struct gfs2_holder gh; | 155 | /* Inode glock must be locked already */ |
| 174 | error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh); | 156 | error = gfs2_inode_refresh(GFS2_I(inode)); |
| 175 | if (unlikely(error)) | 157 | if (error) |
| 176 | goto fail_glock; | 158 | goto fail_refresh; |
| 177 | /* Inode is now uptodate */ | 159 | } else { |
| 178 | gfs2_glock_dq_uninit(&gh); | 160 | inode->i_mode = DT2IF(type); |
| 179 | } | 161 | } |
| 180 | 162 | ||
| 181 | gfs2_set_iop(inode); | 163 | gfs2_set_iop(inode); |
| 164 | unlock_new_inode(inode); | ||
| 182 | } | 165 | } |
| 183 | 166 | ||
| 184 | gfs2_nfsbypass: | ||
| 185 | return inode; | 167 | return inode; |
| 186 | fail_glock: | 168 | |
| 187 | gfs2_glock_dq(&ip->i_iopen_gh); | 169 | fail_refresh: |
| 170 | ip->i_iopen_gh.gh_gl->gl_object = NULL; | ||
| 171 | gfs2_glock_dq_uninit(&ip->i_iopen_gh); | ||
| 188 | fail_iopen: | 172 | fail_iopen: |
| 189 | if (io_gl) | 173 | if (io_gl) |
| 190 | gfs2_glock_put(io_gl); | 174 | gfs2_glock_put(io_gl); |
| 191 | fail_put: | 175 | fail_put: |
| 192 | if (inode->i_state & I_NEW) | 176 | ip->i_gl->gl_object = NULL; |
| 193 | ip->i_gl->gl_object = NULL; | ||
| 194 | gfs2_glock_put(ip->i_gl); | 177 | gfs2_glock_put(ip->i_gl); |
| 195 | fail: | 178 | fail: |
| 196 | if (inode->i_state & I_NEW) | 179 | iget_failed(inode); |
| 197 | iget_failed(inode); | ||
| 198 | else | ||
| 199 | iput(inode); | ||
| 200 | return ERR_PTR(error); | 180 | return ERR_PTR(error); |
| 201 | } | 181 | } |
| 202 | 182 | ||
| @@ -221,14 +201,6 @@ struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr, | |||
| 221 | if (IS_ERR(inode)) | 201 | if (IS_ERR(inode)) |
| 222 | goto fail; | 202 | goto fail; |
| 223 | 203 | ||
| 224 | error = gfs2_inode_refresh(GFS2_I(inode)); | ||
| 225 | if (error) | ||
| 226 | goto fail_iput; | ||
| 227 | |||
| 228 | /* Pick up the works we bypass in gfs2_inode_lookup */ | ||
| 229 | if (inode->i_state & I_NEW) | ||
| 230 | gfs2_set_iop(inode); | ||
| 231 | |||
| 232 | /* Two extra checks for NFS only */ | 204 | /* Two extra checks for NFS only */ |
| 233 | if (no_formal_ino) { | 205 | if (no_formal_ino) { |
| 234 | error = -ESTALE; | 206 | error = -ESTALE; |
diff --git a/fs/gfs2/inode.h b/fs/gfs2/inode.h index 732a183efdb..3e00a66e7cb 100644 --- a/fs/gfs2/inode.h +++ b/fs/gfs2/inode.h | |||
| @@ -96,7 +96,6 @@ err: | |||
| 96 | return -EIO; | 96 | return -EIO; |
| 97 | } | 97 | } |
| 98 | 98 | ||
| 99 | extern void gfs2_set_iop(struct inode *inode); | ||
| 100 | extern struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned type, | 99 | extern struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned type, |
| 101 | u64 no_addr, u64 no_formal_ino); | 100 | u64 no_addr, u64 no_formal_ino); |
| 102 | extern struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr, | 101 | extern struct inode *gfs2_lookup_by_inum(struct gfs2_sbd *sdp, u64 no_addr, |
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c index 16c2ecac7eb..ec73ed70bae 100644 --- a/fs/gfs2/super.c +++ b/fs/gfs2/super.c | |||
| @@ -1336,6 +1336,7 @@ static void gfs2_evict_inode(struct inode *inode) | |||
| 1336 | if (error) | 1336 | if (error) |
| 1337 | goto out_truncate; | 1337 | goto out_truncate; |
| 1338 | 1338 | ||
| 1339 | ip->i_iopen_gh.gh_flags |= GL_NOCACHE; | ||
| 1339 | gfs2_glock_dq_wait(&ip->i_iopen_gh); | 1340 | gfs2_glock_dq_wait(&ip->i_iopen_gh); |
| 1340 | gfs2_holder_reinit(LM_ST_EXCLUSIVE, LM_FLAG_TRY_1CB | GL_NOCACHE, &ip->i_iopen_gh); | 1341 | gfs2_holder_reinit(LM_ST_EXCLUSIVE, LM_FLAG_TRY_1CB | GL_NOCACHE, &ip->i_iopen_gh); |
| 1341 | error = gfs2_glock_nq(&ip->i_iopen_gh); | 1342 | error = gfs2_glock_nq(&ip->i_iopen_gh); |
| @@ -441,7 +441,7 @@ redo: | |||
| 441 | break; | 441 | break; |
| 442 | } | 442 | } |
| 443 | if (do_wakeup) { | 443 | if (do_wakeup) { |
| 444 | wake_up_interruptible_sync_poll(&pipe->wait, POLLOUT); | 444 | wake_up_interruptible_sync_poll(&pipe->wait, POLLOUT | POLLWRNORM); |
| 445 | kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT); | 445 | kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT); |
| 446 | } | 446 | } |
| 447 | pipe_wait(pipe); | 447 | pipe_wait(pipe); |
| @@ -450,7 +450,7 @@ redo: | |||
| 450 | 450 | ||
| 451 | /* Signal writers asynchronously that there is more room. */ | 451 | /* Signal writers asynchronously that there is more room. */ |
| 452 | if (do_wakeup) { | 452 | if (do_wakeup) { |
| 453 | wake_up_interruptible_sync_poll(&pipe->wait, POLLOUT); | 453 | wake_up_interruptible_sync_poll(&pipe->wait, POLLOUT | POLLWRNORM); |
| 454 | kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT); | 454 | kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT); |
| 455 | } | 455 | } |
| 456 | if (ret > 0) | 456 | if (ret > 0) |
| @@ -612,7 +612,7 @@ redo2: | |||
| 612 | break; | 612 | break; |
| 613 | } | 613 | } |
| 614 | if (do_wakeup) { | 614 | if (do_wakeup) { |
| 615 | wake_up_interruptible_sync_poll(&pipe->wait, POLLIN); | 615 | wake_up_interruptible_sync_poll(&pipe->wait, POLLIN | POLLRDNORM); |
| 616 | kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); | 616 | kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); |
| 617 | do_wakeup = 0; | 617 | do_wakeup = 0; |
| 618 | } | 618 | } |
| @@ -623,7 +623,7 @@ redo2: | |||
| 623 | out: | 623 | out: |
| 624 | mutex_unlock(&inode->i_mutex); | 624 | mutex_unlock(&inode->i_mutex); |
| 625 | if (do_wakeup) { | 625 | if (do_wakeup) { |
| 626 | wake_up_interruptible_sync_poll(&pipe->wait, POLLIN); | 626 | wake_up_interruptible_sync_poll(&pipe->wait, POLLIN | POLLRDNORM); |
| 627 | kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); | 627 | kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); |
| 628 | } | 628 | } |
| 629 | if (ret > 0) | 629 | if (ret > 0) |
| @@ -715,7 +715,7 @@ pipe_release(struct inode *inode, int decr, int decw) | |||
| 715 | if (!pipe->readers && !pipe->writers) { | 715 | if (!pipe->readers && !pipe->writers) { |
| 716 | free_pipe_info(inode); | 716 | free_pipe_info(inode); |
| 717 | } else { | 717 | } else { |
| 718 | wake_up_interruptible_sync_poll(&pipe->wait, POLLIN | POLLOUT); | 718 | wake_up_interruptible_sync_poll(&pipe->wait, POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM | POLLERR | POLLHUP); |
| 719 | kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); | 719 | kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN); |
| 720 | kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT); | 720 | kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT); |
| 721 | } | 721 | } |
diff --git a/include/acpi/acexcep.h b/include/acpi/acexcep.h index 17714beb868..5b6c391efc8 100644 --- a/include/acpi/acexcep.h +++ b/include/acpi/acexcep.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acnames.h b/include/acpi/acnames.h index 9cf736ea469..fc1575fd459 100644 --- a/include/acpi/acnames.h +++ b/include/acpi/acnames.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acoutput.h b/include/acpi/acoutput.h index bc4a6deb73b..ef1cef77d32 100644 --- a/include/acpi/acoutput.h +++ b/include/acpi/acoutput.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acpi.h b/include/acpi/acpi.h index a091cabca4b..de39915f6b7 100644 --- a/include/acpi/acpi.h +++ b/include/acpi/acpi.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acpiosxf.h b/include/acpi/acpiosxf.h index 65b3f5888f4..a3252a5ead6 100644 --- a/include/acpi/acpiosxf.h +++ b/include/acpi/acpiosxf.h | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | *****************************************************************************/ | 8 | *****************************************************************************/ |
| 9 | 9 | ||
| 10 | /* | 10 | /* |
| 11 | * Copyright (C) 2000 - 2010, Intel Corp. | 11 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 12 | * All rights reserved. | 12 | * All rights reserved. |
| 13 | * | 13 | * |
| 14 | * Redistribution and use in source and binary forms, with or without | 14 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/acpixf.h b/include/acpi/acpixf.h index 241b8a04c83..e46ec95a8ad 100644 --- a/include/acpi/acpixf.h +++ b/include/acpi/acpixf.h | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | *****************************************************************************/ | 6 | *****************************************************************************/ |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Copyright (C) 2000 - 2010, Intel Corp. | 9 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 10 | * All rights reserved. | 10 | * All rights reserved. |
| 11 | * | 11 | * |
| 12 | * Redistribution and use in source and binary forms, with or without | 12 | * Redistribution and use in source and binary forms, with or without |
| @@ -47,7 +47,7 @@ | |||
| 47 | 47 | ||
| 48 | /* Current ACPICA subsystem version in YYYYMMDD format */ | 48 | /* Current ACPICA subsystem version in YYYYMMDD format */ |
| 49 | 49 | ||
| 50 | #define ACPI_CA_VERSION 0x20101209 | 50 | #define ACPI_CA_VERSION 0x20110112 |
| 51 | 51 | ||
| 52 | #include "actypes.h" | 52 | #include "actypes.h" |
| 53 | #include "actbl.h" | 53 | #include "actbl.h" |
diff --git a/include/acpi/acrestyp.h b/include/acpi/acrestyp.h index e5526354ba5..0a66cc45dd6 100644 --- a/include/acpi/acrestyp.h +++ b/include/acpi/acrestyp.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h index ad2001683ba..7e42bfee0e2 100644 --- a/include/acpi/actbl.h +++ b/include/acpi/actbl.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/actbl1.h b/include/acpi/actbl1.h index cd77aa75c96..7504bc99b29 100644 --- a/include/acpi/actbl1.h +++ b/include/acpi/actbl1.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/actbl2.h b/include/acpi/actbl2.h index d4136b28011..0fc15dfb2e2 100644 --- a/include/acpi/actbl2.h +++ b/include/acpi/actbl2.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/actypes.h b/include/acpi/actypes.h index 939a431a6ab..64f838beaab 100644 --- a/include/acpi/actypes.h +++ b/include/acpi/actypes.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/platform/acenv.h b/include/acpi/platform/acenv.h index a3e334ab111..5af3ed52ef9 100644 --- a/include/acpi/platform/acenv.h +++ b/include/acpi/platform/acenv.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/platform/acgcc.h b/include/acpi/platform/acgcc.h index 5dcb9537343..e228893591a 100644 --- a/include/acpi/platform/acgcc.h +++ b/include/acpi/platform/acgcc.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h index 572189e3713..5d2a5e9544d 100644 --- a/include/acpi/platform/aclinux.h +++ b/include/acpi/platform/aclinux.h | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | *****************************************************************************/ | 5 | *****************************************************************************/ |
| 6 | 6 | ||
| 7 | /* | 7 | /* |
| 8 | * Copyright (C) 2000 - 2010, Intel Corp. | 8 | * Copyright (C) 2000 - 2011, Intel Corp. |
| 9 | * All rights reserved. | 9 | * All rights reserved. |
| 10 | * | 10 | * |
| 11 | * Redistribution and use in source and binary forms, with or without | 11 | * Redistribution and use in source and binary forms, with or without |
diff --git a/include/linux/ieee80211.h b/include/linux/ieee80211.h index 6042228954a..294169e3136 100644 --- a/include/linux/ieee80211.h +++ b/include/linux/ieee80211.h | |||
| @@ -959,7 +959,7 @@ struct ieee80211_ht_info { | |||
| 959 | /* block-ack parameters */ | 959 | /* block-ack parameters */ |
| 960 | #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002 | 960 | #define IEEE80211_ADDBA_PARAM_POLICY_MASK 0x0002 |
| 961 | #define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C | 961 | #define IEEE80211_ADDBA_PARAM_TID_MASK 0x003C |
| 962 | #define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFA0 | 962 | #define IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK 0xFFC0 |
| 963 | #define IEEE80211_DELBA_PARAM_TID_MASK 0xF000 | 963 | #define IEEE80211_DELBA_PARAM_TID_MASK 0xF000 |
| 964 | #define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800 | 964 | #define IEEE80211_DELBA_PARAM_INITIATOR_MASK 0x0800 |
| 965 | 965 | ||
diff --git a/include/net/sctp/user.h b/include/net/sctp/user.h index 2a128c8c271..e73ebdae323 100644 --- a/include/net/sctp/user.h +++ b/include/net/sctp/user.h | |||
| @@ -78,6 +78,7 @@ typedef __s32 sctp_assoc_t; | |||
| 78 | #define SCTP_GET_PEER_ADDR_INFO 15 | 78 | #define SCTP_GET_PEER_ADDR_INFO 15 |
| 79 | #define SCTP_DELAYED_ACK_TIME 16 | 79 | #define SCTP_DELAYED_ACK_TIME 16 |
| 80 | #define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME | 80 | #define SCTP_DELAYED_ACK SCTP_DELAYED_ACK_TIME |
| 81 | #define SCTP_DELAYED_SACK SCTP_DELAYED_ACK_TIME | ||
| 81 | #define SCTP_CONTEXT 17 | 82 | #define SCTP_CONTEXT 17 |
| 82 | #define SCTP_FRAGMENT_INTERLEAVE 18 | 83 | #define SCTP_FRAGMENT_INTERLEAVE 18 |
| 83 | #define SCTP_PARTIAL_DELIVERY_POINT 19 /* Set/Get partial delivery point */ | 84 | #define SCTP_PARTIAL_DELIVERY_POINT 19 /* Set/Get partial delivery point */ |
diff --git a/net/batman-adv/main.h b/net/batman-adv/main.h index d4d9926c220..65106fb61b8 100644 --- a/net/batman-adv/main.h +++ b/net/batman-adv/main.h | |||
| @@ -151,9 +151,9 @@ int debug_log(struct bat_priv *bat_priv, char *fmt, ...); | |||
| 151 | } \ | 151 | } \ |
| 152 | while (0) | 152 | while (0) |
| 153 | #else /* !CONFIG_BATMAN_ADV_DEBUG */ | 153 | #else /* !CONFIG_BATMAN_ADV_DEBUG */ |
| 154 | static inline void bat_dbg(char type __attribute__((unused)), | 154 | static inline void bat_dbg(char type __always_unused, |
| 155 | struct bat_priv *bat_priv __attribute__((unused)), | 155 | struct bat_priv *bat_priv __always_unused, |
| 156 | char *fmt __attribute__((unused)), ...) | 156 | char *fmt __always_unused, ...) |
| 157 | { | 157 | { |
| 158 | } | 158 | } |
| 159 | #endif | 159 | #endif |
diff --git a/net/batman-adv/packet.h b/net/batman-adv/packet.h index b49fdf70a6d..2284e8129cb 100644 --- a/net/batman-adv/packet.h +++ b/net/batman-adv/packet.h | |||
| @@ -63,7 +63,7 @@ struct batman_packet { | |||
| 63 | uint8_t num_hna; | 63 | uint8_t num_hna; |
| 64 | uint8_t gw_flags; /* flags related to gateway class */ | 64 | uint8_t gw_flags; /* flags related to gateway class */ |
| 65 | uint8_t align; | 65 | uint8_t align; |
| 66 | } __attribute__((packed)); | 66 | } __packed; |
| 67 | 67 | ||
| 68 | #define BAT_PACKET_LEN sizeof(struct batman_packet) | 68 | #define BAT_PACKET_LEN sizeof(struct batman_packet) |
| 69 | 69 | ||
| @@ -76,7 +76,7 @@ struct icmp_packet { | |||
| 76 | uint8_t orig[6]; | 76 | uint8_t orig[6]; |
| 77 | uint16_t seqno; | 77 | uint16_t seqno; |
| 78 | uint8_t uid; | 78 | uint8_t uid; |
| 79 | } __attribute__((packed)); | 79 | } __packed; |
| 80 | 80 | ||
| 81 | #define BAT_RR_LEN 16 | 81 | #define BAT_RR_LEN 16 |
| 82 | 82 | ||
| @@ -93,14 +93,14 @@ struct icmp_packet_rr { | |||
| 93 | uint8_t uid; | 93 | uint8_t uid; |
| 94 | uint8_t rr_cur; | 94 | uint8_t rr_cur; |
| 95 | uint8_t rr[BAT_RR_LEN][ETH_ALEN]; | 95 | uint8_t rr[BAT_RR_LEN][ETH_ALEN]; |
| 96 | } __attribute__((packed)); | 96 | } __packed; |
| 97 | 97 | ||
| 98 | struct unicast_packet { | 98 | struct unicast_packet { |
| 99 | uint8_t packet_type; | 99 | uint8_t packet_type; |
| 100 | uint8_t version; /* batman version field */ | 100 | uint8_t version; /* batman version field */ |
| 101 | uint8_t dest[6]; | 101 | uint8_t dest[6]; |
| 102 | uint8_t ttl; | 102 | uint8_t ttl; |
| 103 | } __attribute__((packed)); | 103 | } __packed; |
| 104 | 104 | ||
| 105 | struct unicast_frag_packet { | 105 | struct unicast_frag_packet { |
| 106 | uint8_t packet_type; | 106 | uint8_t packet_type; |
| @@ -110,7 +110,7 @@ struct unicast_frag_packet { | |||
| 110 | uint8_t flags; | 110 | uint8_t flags; |
| 111 | uint8_t orig[6]; | 111 | uint8_t orig[6]; |
| 112 | uint16_t seqno; | 112 | uint16_t seqno; |
| 113 | } __attribute__((packed)); | 113 | } __packed; |
| 114 | 114 | ||
| 115 | struct bcast_packet { | 115 | struct bcast_packet { |
| 116 | uint8_t packet_type; | 116 | uint8_t packet_type; |
| @@ -118,7 +118,7 @@ struct bcast_packet { | |||
| 118 | uint8_t orig[6]; | 118 | uint8_t orig[6]; |
| 119 | uint8_t ttl; | 119 | uint8_t ttl; |
| 120 | uint32_t seqno; | 120 | uint32_t seqno; |
| 121 | } __attribute__((packed)); | 121 | } __packed; |
| 122 | 122 | ||
| 123 | struct vis_packet { | 123 | struct vis_packet { |
| 124 | uint8_t packet_type; | 124 | uint8_t packet_type; |
| @@ -131,6 +131,6 @@ struct vis_packet { | |||
| 131 | * neighbors */ | 131 | * neighbors */ |
| 132 | uint8_t target_orig[6]; /* who should receive this packet */ | 132 | uint8_t target_orig[6]; /* who should receive this packet */ |
| 133 | uint8_t sender_orig[6]; /* who sent or rebroadcasted this packet */ | 133 | uint8_t sender_orig[6]; /* who sent or rebroadcasted this packet */ |
| 134 | } __attribute__((packed)); | 134 | } __packed; |
| 135 | 135 | ||
| 136 | #endif /* _NET_BATMAN_ADV_PACKET_H_ */ | 136 | #endif /* _NET_BATMAN_ADV_PACKET_H_ */ |
diff --git a/net/batman-adv/types.h b/net/batman-adv/types.h index 97cb23dd3e6..bf3f6f5a12c 100644 --- a/net/batman-adv/types.h +++ b/net/batman-adv/types.h | |||
| @@ -246,13 +246,13 @@ struct vis_info { | |||
| 246 | /* this packet might be part of the vis send queue. */ | 246 | /* this packet might be part of the vis send queue. */ |
| 247 | struct sk_buff *skb_packet; | 247 | struct sk_buff *skb_packet; |
| 248 | /* vis_info may follow here*/ | 248 | /* vis_info may follow here*/ |
| 249 | } __attribute__((packed)); | 249 | } __packed; |
| 250 | 250 | ||
| 251 | struct vis_info_entry { | 251 | struct vis_info_entry { |
| 252 | uint8_t src[ETH_ALEN]; | 252 | uint8_t src[ETH_ALEN]; |
| 253 | uint8_t dest[ETH_ALEN]; | 253 | uint8_t dest[ETH_ALEN]; |
| 254 | uint8_t quality; /* quality = 0 means HNA */ | 254 | uint8_t quality; /* quality = 0 means HNA */ |
| 255 | } __attribute__((packed)); | 255 | } __packed; |
| 256 | 256 | ||
| 257 | struct recvlist_node { | 257 | struct recvlist_node { |
| 258 | struct list_head list; | 258 | struct list_head list; |
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c index dc2e28bed84..ee41fef04b2 100644 --- a/net/batman-adv/unicast.c +++ b/net/batman-adv/unicast.c | |||
| @@ -229,10 +229,12 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv, | |||
| 229 | if (!bat_priv->primary_if) | 229 | if (!bat_priv->primary_if) |
| 230 | goto dropped; | 230 | goto dropped; |
| 231 | 231 | ||
| 232 | unicast_packet = (struct unicast_packet *) skb->data; | 232 | frag_skb = dev_alloc_skb(data_len - (data_len / 2) + ucf_hdr_len); |
| 233 | if (!frag_skb) | ||
| 234 | goto dropped; | ||
| 233 | 235 | ||
| 236 | unicast_packet = (struct unicast_packet *) skb->data; | ||
| 234 | memcpy(&tmp_uc, unicast_packet, uc_hdr_len); | 237 | memcpy(&tmp_uc, unicast_packet, uc_hdr_len); |
| 235 | frag_skb = dev_alloc_skb(data_len - (data_len / 2) + ucf_hdr_len); | ||
| 236 | skb_split(skb, frag_skb, data_len / 2); | 238 | skb_split(skb, frag_skb, data_len / 2); |
| 237 | 239 | ||
| 238 | if (my_skb_head_push(skb, ucf_hdr_len - uc_hdr_len) < 0 || | 240 | if (my_skb_head_push(skb, ucf_hdr_len - uc_hdr_len) < 0 || |
diff --git a/net/caif/cfcnfg.c b/net/caif/cfcnfg.c index 21ede141018..c665de778b6 100644 --- a/net/caif/cfcnfg.c +++ b/net/caif/cfcnfg.c | |||
| @@ -191,6 +191,7 @@ int cfcnfg_disconn_adapt_layer(struct cfcnfg *cnfg, struct cflayer *adap_layer) | |||
| 191 | struct cflayer *servl = NULL; | 191 | struct cflayer *servl = NULL; |
| 192 | struct cfcnfg_phyinfo *phyinfo = NULL; | 192 | struct cfcnfg_phyinfo *phyinfo = NULL; |
| 193 | u8 phyid = 0; | 193 | u8 phyid = 0; |
| 194 | |||
| 194 | caif_assert(adap_layer != NULL); | 195 | caif_assert(adap_layer != NULL); |
| 195 | channel_id = adap_layer->id; | 196 | channel_id = adap_layer->id; |
| 196 | if (adap_layer->dn == NULL || channel_id == 0) { | 197 | if (adap_layer->dn == NULL || channel_id == 0) { |
| @@ -199,16 +200,16 @@ int cfcnfg_disconn_adapt_layer(struct cfcnfg *cnfg, struct cflayer *adap_layer) | |||
| 199 | goto end; | 200 | goto end; |
| 200 | } | 201 | } |
| 201 | servl = cfmuxl_remove_uplayer(cnfg->mux, channel_id); | 202 | servl = cfmuxl_remove_uplayer(cnfg->mux, channel_id); |
| 202 | if (servl == NULL) | ||
| 203 | goto end; | ||
| 204 | layer_set_up(servl, NULL); | ||
| 205 | ret = cfctrl_linkdown_req(cnfg->ctrl, channel_id, adap_layer); | ||
| 206 | if (servl == NULL) { | 203 | if (servl == NULL) { |
| 207 | pr_err("PROTOCOL ERROR - Error removing service_layer Channel_Id(%d)", | 204 | pr_err("PROTOCOL ERROR - Error removing service_layer Channel_Id(%d)", |
| 208 | channel_id); | 205 | channel_id); |
| 209 | ret = -EINVAL; | 206 | ret = -EINVAL; |
| 210 | goto end; | 207 | goto end; |
| 211 | } | 208 | } |
| 209 | layer_set_up(servl, NULL); | ||
| 210 | ret = cfctrl_linkdown_req(cnfg->ctrl, channel_id, adap_layer); | ||
| 211 | if (ret) | ||
| 212 | goto end; | ||
| 212 | caif_assert(channel_id == servl->id); | 213 | caif_assert(channel_id == servl->id); |
| 213 | if (adap_layer->dn != NULL) { | 214 | if (adap_layer->dn != NULL) { |
| 214 | phyid = cfsrvl_getphyid(adap_layer->dn); | 215 | phyid = cfsrvl_getphyid(adap_layer->dn); |
diff --git a/net/can/bcm.c b/net/can/bcm.c index 9d5e8accfab..092dc88a7c6 100644 --- a/net/can/bcm.c +++ b/net/can/bcm.c | |||
| @@ -1256,6 +1256,9 @@ static int bcm_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
| 1256 | struct sockaddr_can *addr = | 1256 | struct sockaddr_can *addr = |
| 1257 | (struct sockaddr_can *)msg->msg_name; | 1257 | (struct sockaddr_can *)msg->msg_name; |
| 1258 | 1258 | ||
| 1259 | if (msg->msg_namelen < sizeof(*addr)) | ||
| 1260 | return -EINVAL; | ||
| 1261 | |||
| 1259 | if (addr->can_family != AF_CAN) | 1262 | if (addr->can_family != AF_CAN) |
| 1260 | return -EINVAL; | 1263 | return -EINVAL; |
| 1261 | 1264 | ||
diff --git a/net/can/raw.c b/net/can/raw.c index e88f610fdb7..883e9d74fdd 100644 --- a/net/can/raw.c +++ b/net/can/raw.c | |||
| @@ -649,6 +649,9 @@ static int raw_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
| 649 | struct sockaddr_can *addr = | 649 | struct sockaddr_can *addr = |
| 650 | (struct sockaddr_can *)msg->msg_name; | 650 | (struct sockaddr_can *)msg->msg_name; |
| 651 | 651 | ||
| 652 | if (msg->msg_namelen < sizeof(*addr)) | ||
| 653 | return -EINVAL; | ||
| 654 | |||
| 652 | if (addr->can_family != AF_CAN) | 655 | if (addr->can_family != AF_CAN) |
| 653 | return -EINVAL; | 656 | return -EINVAL; |
| 654 | 657 | ||
diff --git a/net/core/dev.c b/net/core/dev.c index 54277df0f73..7c6a46f8037 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
| @@ -2001,7 +2001,7 @@ static bool can_checksum_protocol(unsigned long features, __be16 protocol) | |||
| 2001 | 2001 | ||
| 2002 | static int harmonize_features(struct sk_buff *skb, __be16 protocol, int features) | 2002 | static int harmonize_features(struct sk_buff *skb, __be16 protocol, int features) |
| 2003 | { | 2003 | { |
| 2004 | if (!can_checksum_protocol(protocol, features)) { | 2004 | if (!can_checksum_protocol(features, protocol)) { |
| 2005 | features &= ~NETIF_F_ALL_CSUM; | 2005 | features &= ~NETIF_F_ALL_CSUM; |
| 2006 | features &= ~NETIF_F_SG; | 2006 | features &= ~NETIF_F_SG; |
| 2007 | } else if (illegal_highdma(skb->dev, skb)) { | 2007 | } else if (illegal_highdma(skb->dev, skb)) { |
| @@ -2023,13 +2023,13 @@ int netif_skb_features(struct sk_buff *skb) | |||
| 2023 | return harmonize_features(skb, protocol, features); | 2023 | return harmonize_features(skb, protocol, features); |
| 2024 | } | 2024 | } |
| 2025 | 2025 | ||
| 2026 | features &= skb->dev->vlan_features; | 2026 | features &= (skb->dev->vlan_features | NETIF_F_HW_VLAN_TX); |
| 2027 | 2027 | ||
| 2028 | if (protocol != htons(ETH_P_8021Q)) { | 2028 | if (protocol != htons(ETH_P_8021Q)) { |
| 2029 | return harmonize_features(skb, protocol, features); | 2029 | return harmonize_features(skb, protocol, features); |
| 2030 | } else { | 2030 | } else { |
| 2031 | features &= NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | | 2031 | features &= NETIF_F_SG | NETIF_F_HIGHDMA | NETIF_F_FRAGLIST | |
| 2032 | NETIF_F_GEN_CSUM; | 2032 | NETIF_F_GEN_CSUM | NETIF_F_HW_VLAN_TX; |
| 2033 | return harmonize_features(skb, protocol, features); | 2033 | return harmonize_features(skb, protocol, features); |
| 2034 | } | 2034 | } |
| 2035 | } | 2035 | } |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index a5f7535aab5..750db57f3bb 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
| @@ -1820,7 +1820,7 @@ static int rtnetlink_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 1820 | if (kind != 2 && security_netlink_recv(skb, CAP_NET_ADMIN)) | 1820 | if (kind != 2 && security_netlink_recv(skb, CAP_NET_ADMIN)) |
| 1821 | return -EPERM; | 1821 | return -EPERM; |
| 1822 | 1822 | ||
| 1823 | if (kind == 2 && (nlh->nlmsg_flags & NLM_F_DUMP) == NLM_F_DUMP) { | 1823 | if (kind == 2 && nlh->nlmsg_flags&NLM_F_DUMP) { |
| 1824 | struct sock *rtnl; | 1824 | struct sock *rtnl; |
| 1825 | rtnl_dumpit_func dumpit; | 1825 | rtnl_dumpit_func dumpit; |
| 1826 | 1826 | ||
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index 2746c1fa641..2ada17129fc 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c | |||
| @@ -858,7 +858,7 @@ static int inet_diag_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 858 | nlmsg_len(nlh) < hdrlen) | 858 | nlmsg_len(nlh) < hdrlen) |
| 859 | return -EINVAL; | 859 | return -EINVAL; |
| 860 | 860 | ||
| 861 | if ((nlh->nlmsg_flags & NLM_F_DUMP) == NLM_F_DUMP) { | 861 | if (nlh->nlmsg_flags & NLM_F_DUMP) { |
| 862 | if (nlmsg_attrlen(nlh, hdrlen)) { | 862 | if (nlmsg_attrlen(nlh, hdrlen)) { |
| 863 | struct nlattr *attr; | 863 | struct nlattr *attr; |
| 864 | 864 | ||
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 5b189c97c2f..24a1cf110d8 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
| @@ -420,9 +420,6 @@ static struct inet6_dev * ipv6_add_dev(struct net_device *dev) | |||
| 420 | dev->type == ARPHRD_TUNNEL6 || | 420 | dev->type == ARPHRD_TUNNEL6 || |
| 421 | dev->type == ARPHRD_SIT || | 421 | dev->type == ARPHRD_SIT || |
| 422 | dev->type == ARPHRD_NONE) { | 422 | dev->type == ARPHRD_NONE) { |
| 423 | printk(KERN_INFO | ||
| 424 | "%s: Disabled Privacy Extensions\n", | ||
| 425 | dev->name); | ||
| 426 | ndev->cnf.use_tempaddr = -1; | 423 | ndev->cnf.use_tempaddr = -1; |
| 427 | } else { | 424 | } else { |
| 428 | in6_dev_hold(ndev); | 425 | in6_dev_hold(ndev); |
diff --git a/net/mac80211/agg-rx.c b/net/mac80211/agg-rx.c index f138b195d65..227ca82eef7 100644 --- a/net/mac80211/agg-rx.c +++ b/net/mac80211/agg-rx.c | |||
| @@ -185,8 +185,6 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, | |||
| 185 | struct ieee80211_mgmt *mgmt, | 185 | struct ieee80211_mgmt *mgmt, |
| 186 | size_t len) | 186 | size_t len) |
| 187 | { | 187 | { |
| 188 | struct ieee80211_hw *hw = &local->hw; | ||
| 189 | struct ieee80211_conf *conf = &hw->conf; | ||
| 190 | struct tid_ampdu_rx *tid_agg_rx; | 188 | struct tid_ampdu_rx *tid_agg_rx; |
| 191 | u16 capab, tid, timeout, ba_policy, buf_size, start_seq_num, status; | 189 | u16 capab, tid, timeout, ba_policy, buf_size, start_seq_num, status; |
| 192 | u8 dialog_token; | 190 | u8 dialog_token; |
| @@ -231,13 +229,8 @@ void ieee80211_process_addba_request(struct ieee80211_local *local, | |||
| 231 | goto end_no_lock; | 229 | goto end_no_lock; |
| 232 | } | 230 | } |
| 233 | /* determine default buffer size */ | 231 | /* determine default buffer size */ |
| 234 | if (buf_size == 0) { | 232 | if (buf_size == 0) |
| 235 | struct ieee80211_supported_band *sband; | 233 | buf_size = IEEE80211_MAX_AMPDU_BUF; |
| 236 | |||
| 237 | sband = local->hw.wiphy->bands[conf->channel->band]; | ||
| 238 | buf_size = IEEE80211_MIN_AMPDU_BUF; | ||
| 239 | buf_size = buf_size << sband->ht_cap.ampdu_factor; | ||
| 240 | } | ||
| 241 | 234 | ||
| 242 | 235 | ||
| 243 | /* examine state machine */ | 236 | /* examine state machine */ |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 485d36bc9a4..a46ff06d7cb 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
| @@ -39,6 +39,8 @@ module_param(ieee80211_disable_40mhz_24ghz, bool, 0644); | |||
| 39 | MODULE_PARM_DESC(ieee80211_disable_40mhz_24ghz, | 39 | MODULE_PARM_DESC(ieee80211_disable_40mhz_24ghz, |
| 40 | "Disable 40MHz support in the 2.4GHz band"); | 40 | "Disable 40MHz support in the 2.4GHz band"); |
| 41 | 41 | ||
| 42 | static struct lock_class_key ieee80211_rx_skb_queue_class; | ||
| 43 | |||
| 42 | void ieee80211_configure_filter(struct ieee80211_local *local) | 44 | void ieee80211_configure_filter(struct ieee80211_local *local) |
| 43 | { | 45 | { |
| 44 | u64 mc; | 46 | u64 mc; |
| @@ -569,7 +571,15 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len, | |||
| 569 | spin_lock_init(&local->filter_lock); | 571 | spin_lock_init(&local->filter_lock); |
| 570 | spin_lock_init(&local->queue_stop_reason_lock); | 572 | spin_lock_init(&local->queue_stop_reason_lock); |
| 571 | 573 | ||
| 572 | skb_queue_head_init(&local->rx_skb_queue); | 574 | /* |
| 575 | * The rx_skb_queue is only accessed from tasklets, | ||
| 576 | * but other SKB queues are used from within IRQ | ||
| 577 | * context. Therefore, this one needs a different | ||
| 578 | * locking class so our direct, non-irq-safe use of | ||
| 579 | * the queue's lock doesn't throw lockdep warnings. | ||
| 580 | */ | ||
| 581 | skb_queue_head_init_class(&local->rx_skb_queue, | ||
| 582 | &ieee80211_rx_skb_queue_class); | ||
| 573 | 583 | ||
| 574 | INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work); | 584 | INIT_DELAYED_WORK(&local->scan_work, ieee80211_scan_work); |
| 575 | 585 | ||
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 2b7eef37875..93297aaceb2 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
| @@ -924,7 +924,7 @@ ctnetlink_get_conntrack(struct sock *ctnl, struct sk_buff *skb, | |||
| 924 | u16 zone; | 924 | u16 zone; |
| 925 | int err; | 925 | int err; |
| 926 | 926 | ||
| 927 | if ((nlh->nlmsg_flags & NLM_F_DUMP) == NLM_F_DUMP) | 927 | if (nlh->nlmsg_flags & NLM_F_DUMP) |
| 928 | return netlink_dump_start(ctnl, skb, nlh, ctnetlink_dump_table, | 928 | return netlink_dump_start(ctnl, skb, nlh, ctnetlink_dump_table, |
| 929 | ctnetlink_done); | 929 | ctnetlink_done); |
| 930 | 930 | ||
| @@ -1787,7 +1787,7 @@ ctnetlink_get_expect(struct sock *ctnl, struct sk_buff *skb, | |||
| 1787 | u16 zone; | 1787 | u16 zone; |
| 1788 | int err; | 1788 | int err; |
| 1789 | 1789 | ||
| 1790 | if ((nlh->nlmsg_flags & NLM_F_DUMP) == NLM_F_DUMP) { | 1790 | if (nlh->nlmsg_flags & NLM_F_DUMP) { |
| 1791 | return netlink_dump_start(ctnl, skb, nlh, | 1791 | return netlink_dump_start(ctnl, skb, nlh, |
| 1792 | ctnetlink_exp_dump_table, | 1792 | ctnetlink_exp_dump_table, |
| 1793 | ctnetlink_exp_done); | 1793 | ctnetlink_exp_done); |
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index f83cb370292..1781d99145e 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c | |||
| @@ -519,7 +519,7 @@ static int genl_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 519 | security_netlink_recv(skb, CAP_NET_ADMIN)) | 519 | security_netlink_recv(skb, CAP_NET_ADMIN)) |
| 520 | return -EPERM; | 520 | return -EPERM; |
| 521 | 521 | ||
| 522 | if ((nlh->nlmsg_flags & NLM_F_DUMP) == NLM_F_DUMP) { | 522 | if (nlh->nlmsg_flags & NLM_F_DUMP) { |
| 523 | if (ops->dumpit == NULL) | 523 | if (ops->dumpit == NULL) |
| 524 | return -EOPNOTSUPP; | 524 | return -EOPNOTSUPP; |
| 525 | 525 | ||
diff --git a/net/sctp/socket.c b/net/sctp/socket.c index a09b0dd25f5..8e02550ff3e 100644 --- a/net/sctp/socket.c +++ b/net/sctp/socket.c | |||
| @@ -3428,7 +3428,7 @@ SCTP_STATIC int sctp_setsockopt(struct sock *sk, int level, int optname, | |||
| 3428 | retval = sctp_setsockopt_peer_addr_params(sk, optval, optlen); | 3428 | retval = sctp_setsockopt_peer_addr_params(sk, optval, optlen); |
| 3429 | break; | 3429 | break; |
| 3430 | 3430 | ||
| 3431 | case SCTP_DELAYED_ACK: | 3431 | case SCTP_DELAYED_SACK: |
| 3432 | retval = sctp_setsockopt_delayed_ack(sk, optval, optlen); | 3432 | retval = sctp_setsockopt_delayed_ack(sk, optval, optlen); |
| 3433 | break; | 3433 | break; |
| 3434 | case SCTP_PARTIAL_DELIVERY_POINT: | 3434 | case SCTP_PARTIAL_DELIVERY_POINT: |
| @@ -5333,7 +5333,7 @@ SCTP_STATIC int sctp_getsockopt(struct sock *sk, int level, int optname, | |||
| 5333 | retval = sctp_getsockopt_peer_addr_params(sk, len, optval, | 5333 | retval = sctp_getsockopt_peer_addr_params(sk, len, optval, |
| 5334 | optlen); | 5334 | optlen); |
| 5335 | break; | 5335 | break; |
| 5336 | case SCTP_DELAYED_ACK: | 5336 | case SCTP_DELAYED_SACK: |
| 5337 | retval = sctp_getsockopt_delayed_ack(sk, len, optval, | 5337 | retval = sctp_getsockopt_delayed_ack(sk, len, optval, |
| 5338 | optlen); | 5338 | optlen); |
| 5339 | break; | 5339 | break; |
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index d5e1e0b0889..61291965c5f 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c | |||
| @@ -2189,7 +2189,7 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 2189 | 2189 | ||
| 2190 | if ((type == (XFRM_MSG_GETSA - XFRM_MSG_BASE) || | 2190 | if ((type == (XFRM_MSG_GETSA - XFRM_MSG_BASE) || |
| 2191 | type == (XFRM_MSG_GETPOLICY - XFRM_MSG_BASE)) && | 2191 | type == (XFRM_MSG_GETPOLICY - XFRM_MSG_BASE)) && |
| 2192 | (nlh->nlmsg_flags & NLM_F_DUMP) == NLM_F_DUMP) { | 2192 | (nlh->nlmsg_flags & NLM_F_DUMP)) { |
| 2193 | if (link->dump == NULL) | 2193 | if (link->dump == NULL) |
| 2194 | return -EINVAL; | 2194 | return -EINVAL; |
| 2195 | 2195 | ||
diff --git a/security/keys/trusted_defined.c b/security/keys/trusted_defined.c index 975e9f29a52..2836c6dc18a 100644 --- a/security/keys/trusted_defined.c +++ b/security/keys/trusted_defined.c | |||
| @@ -101,11 +101,13 @@ static int TSS_rawhmac(unsigned char *digest, const unsigned char *key, | |||
| 101 | if (dlen == 0) | 101 | if (dlen == 0) |
| 102 | break; | 102 | break; |
| 103 | data = va_arg(argp, unsigned char *); | 103 | data = va_arg(argp, unsigned char *); |
| 104 | if (data == NULL) | 104 | if (data == NULL) { |
| 105 | return -EINVAL; | 105 | ret = -EINVAL; |
| 106 | break; | ||
| 107 | } | ||
| 106 | ret = crypto_shash_update(&sdesc->shash, data, dlen); | 108 | ret = crypto_shash_update(&sdesc->shash, data, dlen); |
| 107 | if (ret < 0) | 109 | if (ret < 0) |
| 108 | goto out; | 110 | break; |
| 109 | } | 111 | } |
| 110 | va_end(argp); | 112 | va_end(argp); |
| 111 | if (!ret) | 113 | if (!ret) |
| @@ -146,14 +148,17 @@ static int TSS_authhmac(unsigned char *digest, const unsigned char *key, | |||
| 146 | if (dlen == 0) | 148 | if (dlen == 0) |
| 147 | break; | 149 | break; |
| 148 | data = va_arg(argp, unsigned char *); | 150 | data = va_arg(argp, unsigned char *); |
| 149 | ret = crypto_shash_update(&sdesc->shash, data, dlen); | 151 | if (!data) { |
| 150 | if (ret < 0) { | 152 | ret = -EINVAL; |
| 151 | va_end(argp); | 153 | break; |
| 152 | goto out; | ||
| 153 | } | 154 | } |
| 155 | ret = crypto_shash_update(&sdesc->shash, data, dlen); | ||
| 156 | if (ret < 0) | ||
| 157 | break; | ||
| 154 | } | 158 | } |
| 155 | va_end(argp); | 159 | va_end(argp); |
| 156 | ret = crypto_shash_final(&sdesc->shash, paramdigest); | 160 | if (!ret) |
| 161 | ret = crypto_shash_final(&sdesc->shash, paramdigest); | ||
| 157 | if (!ret) | 162 | if (!ret) |
| 158 | ret = TSS_rawhmac(digest, key, keylen, SHA1_DIGEST_SIZE, | 163 | ret = TSS_rawhmac(digest, key, keylen, SHA1_DIGEST_SIZE, |
| 159 | paramdigest, TPM_NONCE_SIZE, h1, | 164 | paramdigest, TPM_NONCE_SIZE, h1, |
| @@ -222,13 +227,12 @@ static int TSS_checkhmac1(unsigned char *buffer, | |||
| 222 | break; | 227 | break; |
| 223 | dpos = va_arg(argp, unsigned int); | 228 | dpos = va_arg(argp, unsigned int); |
| 224 | ret = crypto_shash_update(&sdesc->shash, buffer + dpos, dlen); | 229 | ret = crypto_shash_update(&sdesc->shash, buffer + dpos, dlen); |
| 225 | if (ret < 0) { | 230 | if (ret < 0) |
| 226 | va_end(argp); | 231 | break; |
| 227 | goto out; | ||
| 228 | } | ||
| 229 | } | 232 | } |
| 230 | va_end(argp); | 233 | va_end(argp); |
| 231 | ret = crypto_shash_final(&sdesc->shash, paramdigest); | 234 | if (!ret) |
| 235 | ret = crypto_shash_final(&sdesc->shash, paramdigest); | ||
| 232 | if (ret < 0) | 236 | if (ret < 0) |
| 233 | goto out; | 237 | goto out; |
| 234 | 238 | ||
| @@ -316,13 +320,12 @@ static int TSS_checkhmac2(unsigned char *buffer, | |||
| 316 | break; | 320 | break; |
| 317 | dpos = va_arg(argp, unsigned int); | 321 | dpos = va_arg(argp, unsigned int); |
| 318 | ret = crypto_shash_update(&sdesc->shash, buffer + dpos, dlen); | 322 | ret = crypto_shash_update(&sdesc->shash, buffer + dpos, dlen); |
| 319 | if (ret < 0) { | 323 | if (ret < 0) |
| 320 | va_end(argp); | 324 | break; |
| 321 | goto out; | ||
| 322 | } | ||
| 323 | } | 325 | } |
| 324 | va_end(argp); | 326 | va_end(argp); |
| 325 | ret = crypto_shash_final(&sdesc->shash, paramdigest); | 327 | if (!ret) |
| 328 | ret = crypto_shash_final(&sdesc->shash, paramdigest); | ||
| 326 | if (ret < 0) | 329 | if (ret < 0) |
| 327 | goto out; | 330 | goto out; |
| 328 | 331 | ||
| @@ -511,7 +514,7 @@ static int tpm_seal(struct tpm_buf *tb, uint16_t keytype, | |||
| 511 | /* get session for sealing key */ | 514 | /* get session for sealing key */ |
| 512 | ret = osap(tb, &sess, keyauth, keytype, keyhandle); | 515 | ret = osap(tb, &sess, keyauth, keytype, keyhandle); |
| 513 | if (ret < 0) | 516 | if (ret < 0) |
| 514 | return ret; | 517 | goto out; |
| 515 | dump_sess(&sess); | 518 | dump_sess(&sess); |
| 516 | 519 | ||
| 517 | /* calculate encrypted authorization value */ | 520 | /* calculate encrypted authorization value */ |
| @@ -519,11 +522,11 @@ static int tpm_seal(struct tpm_buf *tb, uint16_t keytype, | |||
| 519 | memcpy(td->xorwork + SHA1_DIGEST_SIZE, sess.enonce, SHA1_DIGEST_SIZE); | 522 | memcpy(td->xorwork + SHA1_DIGEST_SIZE, sess.enonce, SHA1_DIGEST_SIZE); |
| 520 | ret = TSS_sha1(td->xorwork, SHA1_DIGEST_SIZE * 2, td->xorhash); | 523 | ret = TSS_sha1(td->xorwork, SHA1_DIGEST_SIZE * 2, td->xorhash); |
| 521 | if (ret < 0) | 524 | if (ret < 0) |
| 522 | return ret; | 525 | goto out; |
| 523 | 526 | ||
| 524 | ret = tpm_get_random(tb, td->nonceodd, TPM_NONCE_SIZE); | 527 | ret = tpm_get_random(tb, td->nonceodd, TPM_NONCE_SIZE); |
| 525 | if (ret < 0) | 528 | if (ret < 0) |
| 526 | return ret; | 529 | goto out; |
| 527 | ordinal = htonl(TPM_ORD_SEAL); | 530 | ordinal = htonl(TPM_ORD_SEAL); |
| 528 | datsize = htonl(datalen); | 531 | datsize = htonl(datalen); |
| 529 | pcrsize = htonl(pcrinfosize); | 532 | pcrsize = htonl(pcrinfosize); |
| @@ -552,7 +555,7 @@ static int tpm_seal(struct tpm_buf *tb, uint16_t keytype, | |||
| 552 | &datsize, datalen, data, 0, 0); | 555 | &datsize, datalen, data, 0, 0); |
| 553 | } | 556 | } |
| 554 | if (ret < 0) | 557 | if (ret < 0) |
| 555 | return ret; | 558 | goto out; |
| 556 | 559 | ||
| 557 | /* build and send the TPM request packet */ | 560 | /* build and send the TPM request packet */ |
| 558 | INIT_BUF(tb); | 561 | INIT_BUF(tb); |
| @@ -572,7 +575,7 @@ static int tpm_seal(struct tpm_buf *tb, uint16_t keytype, | |||
| 572 | 575 | ||
| 573 | ret = trusted_tpm_send(TPM_ANY_NUM, tb->data, MAX_BUF_SIZE); | 576 | ret = trusted_tpm_send(TPM_ANY_NUM, tb->data, MAX_BUF_SIZE); |
| 574 | if (ret < 0) | 577 | if (ret < 0) |
| 575 | return ret; | 578 | goto out; |
| 576 | 579 | ||
| 577 | /* calculate the size of the returned Blob */ | 580 | /* calculate the size of the returned Blob */ |
| 578 | sealinfosize = LOAD32(tb->data, TPM_DATA_OFFSET + sizeof(uint32_t)); | 581 | sealinfosize = LOAD32(tb->data, TPM_DATA_OFFSET + sizeof(uint32_t)); |
| @@ -591,6 +594,8 @@ static int tpm_seal(struct tpm_buf *tb, uint16_t keytype, | |||
| 591 | memcpy(blob, tb->data + TPM_DATA_OFFSET, storedsize); | 594 | memcpy(blob, tb->data + TPM_DATA_OFFSET, storedsize); |
| 592 | *bloblen = storedsize; | 595 | *bloblen = storedsize; |
| 593 | } | 596 | } |
| 597 | out: | ||
| 598 | kfree(td); | ||
| 594 | return ret; | 599 | return ret; |
| 595 | } | 600 | } |
| 596 | 601 | ||
