diff options
48 files changed, 236 insertions, 188 deletions
diff --git a/arch/mips/alchemy/common/time.c b/arch/mips/alchemy/common/time.c index 7da4d0081487..a7193ae13a5d 100644 --- a/arch/mips/alchemy/common/time.c +++ b/arch/mips/alchemy/common/time.c | |||
@@ -146,7 +146,7 @@ static int __init alchemy_time_init(unsigned int m2int) | |||
146 | cd->shift = 32; | 146 | cd->shift = 32; |
147 | cd->mult = div_sc(32768, NSEC_PER_SEC, cd->shift); | 147 | cd->mult = div_sc(32768, NSEC_PER_SEC, cd->shift); |
148 | cd->max_delta_ns = clockevent_delta2ns(0xffffffff, cd); | 148 | cd->max_delta_ns = clockevent_delta2ns(0xffffffff, cd); |
149 | cd->min_delta_ns = clockevent_delta2ns(8, cd); /* ~0.25ms */ | 149 | cd->min_delta_ns = clockevent_delta2ns(9, cd); /* ~0.28ms */ |
150 | clockevents_register_device(cd); | 150 | clockevents_register_device(cd); |
151 | setup_irq(m2int, &au1x_rtcmatch2_irqaction); | 151 | setup_irq(m2int, &au1x_rtcmatch2_irqaction); |
152 | 152 | ||
diff --git a/arch/mips/ath79/dev-wmac.c b/arch/mips/ath79/dev-wmac.c index 24f546985b69..e21507052066 100644 --- a/arch/mips/ath79/dev-wmac.c +++ b/arch/mips/ath79/dev-wmac.c | |||
@@ -96,7 +96,7 @@ void __init ath79_register_wmac(u8 *cal_data) | |||
96 | { | 96 | { |
97 | if (soc_is_ar913x()) | 97 | if (soc_is_ar913x()) |
98 | ar913x_wmac_setup(); | 98 | ar913x_wmac_setup(); |
99 | if (soc_is_ar933x()) | 99 | else if (soc_is_ar933x()) |
100 | ar933x_wmac_setup(); | 100 | ar933x_wmac_setup(); |
101 | else | 101 | else |
102 | BUG(); | 102 | BUG(); |
diff --git a/arch/mips/configs/nlm_xlp_defconfig b/arch/mips/configs/nlm_xlp_defconfig index 4479fd669ac1..28c6b276c216 100644 --- a/arch/mips/configs/nlm_xlp_defconfig +++ b/arch/mips/configs/nlm_xlp_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_HIGH_RES_TIMERS=y | |||
8 | # CONFIG_SECCOMP is not set | 8 | # CONFIG_SECCOMP is not set |
9 | CONFIG_USE_OF=y | 9 | CONFIG_USE_OF=y |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CROSS_COMPILE="mips-linux-gnu-" | 11 | CONFIG_CROSS_COMPILE="" |
12 | # CONFIG_LOCALVERSION_AUTO is not set | 12 | # CONFIG_LOCALVERSION_AUTO is not set |
13 | CONFIG_SYSVIPC=y | 13 | CONFIG_SYSVIPC=y |
14 | CONFIG_POSIX_MQUEUE=y | 14 | CONFIG_POSIX_MQUEUE=y |
@@ -22,7 +22,7 @@ CONFIG_AUDIT=y | |||
22 | CONFIG_CGROUPS=y | 22 | CONFIG_CGROUPS=y |
23 | CONFIG_NAMESPACES=y | 23 | CONFIG_NAMESPACES=y |
24 | CONFIG_BLK_DEV_INITRD=y | 24 | CONFIG_BLK_DEV_INITRD=y |
25 | CONFIG_INITRAMFS_SOURCE="usr/dev_file_list usr/rootfs.xlp" | 25 | CONFIG_INITRAMFS_SOURCE="" |
26 | CONFIG_RD_BZIP2=y | 26 | CONFIG_RD_BZIP2=y |
27 | CONFIG_RD_LZMA=y | 27 | CONFIG_RD_LZMA=y |
28 | CONFIG_INITRAMFS_COMPRESSION_LZMA=y | 28 | CONFIG_INITRAMFS_COMPRESSION_LZMA=y |
diff --git a/arch/mips/configs/nlm_xlr_defconfig b/arch/mips/configs/nlm_xlr_defconfig index 7c68666fdd64..d0b857d98c91 100644 --- a/arch/mips/configs/nlm_xlr_defconfig +++ b/arch/mips/configs/nlm_xlr_defconfig | |||
@@ -8,7 +8,7 @@ CONFIG_HIGH_RES_TIMERS=y | |||
8 | CONFIG_PREEMPT_VOLUNTARY=y | 8 | CONFIG_PREEMPT_VOLUNTARY=y |
9 | CONFIG_KEXEC=y | 9 | CONFIG_KEXEC=y |
10 | CONFIG_EXPERIMENTAL=y | 10 | CONFIG_EXPERIMENTAL=y |
11 | CONFIG_CROSS_COMPILE="mips-linux-gnu-" | 11 | CONFIG_CROSS_COMPILE="" |
12 | # CONFIG_LOCALVERSION_AUTO is not set | 12 | # CONFIG_LOCALVERSION_AUTO is not set |
13 | CONFIG_SYSVIPC=y | 13 | CONFIG_SYSVIPC=y |
14 | CONFIG_POSIX_MQUEUE=y | 14 | CONFIG_POSIX_MQUEUE=y |
@@ -22,7 +22,7 @@ CONFIG_AUDIT=y | |||
22 | CONFIG_NAMESPACES=y | 22 | CONFIG_NAMESPACES=y |
23 | CONFIG_SCHED_AUTOGROUP=y | 23 | CONFIG_SCHED_AUTOGROUP=y |
24 | CONFIG_BLK_DEV_INITRD=y | 24 | CONFIG_BLK_DEV_INITRD=y |
25 | CONFIG_INITRAMFS_SOURCE="usr/dev_file_list usr/rootfs.xlr" | 25 | CONFIG_INITRAMFS_SOURCE="" |
26 | CONFIG_RD_BZIP2=y | 26 | CONFIG_RD_BZIP2=y |
27 | CONFIG_RD_LZMA=y | 27 | CONFIG_RD_LZMA=y |
28 | CONFIG_INITRAMFS_COMPRESSION_GZIP=y | 28 | CONFIG_INITRAMFS_COMPRESSION_GZIP=y |
diff --git a/arch/mips/configs/powertv_defconfig b/arch/mips/configs/powertv_defconfig index 3b0b6e8c8533..7fda0ce5f692 100644 --- a/arch/mips/configs/powertv_defconfig +++ b/arch/mips/configs/powertv_defconfig | |||
@@ -6,7 +6,7 @@ CONFIG_HZ_1000=y | |||
6 | CONFIG_PREEMPT=y | 6 | CONFIG_PREEMPT=y |
7 | # CONFIG_SECCOMP is not set | 7 | # CONFIG_SECCOMP is not set |
8 | CONFIG_EXPERIMENTAL=y | 8 | CONFIG_EXPERIMENTAL=y |
9 | CONFIG_CROSS_COMPILE="mips-linux-" | 9 | CONFIG_CROSS_COMPILE="" |
10 | # CONFIG_SWAP is not set | 10 | # CONFIG_SWAP is not set |
11 | CONFIG_SYSVIPC=y | 11 | CONFIG_SYSVIPC=y |
12 | CONFIG_LOG_BUF_SHIFT=16 | 12 | CONFIG_LOG_BUF_SHIFT=16 |
diff --git a/arch/mips/include/asm/mach-au1x00/gpio-au1300.h b/arch/mips/include/asm/mach-au1x00/gpio-au1300.h index 556e1be20bf6..fb9975c74c57 100644 --- a/arch/mips/include/asm/mach-au1x00/gpio-au1300.h +++ b/arch/mips/include/asm/mach-au1x00/gpio-au1300.h | |||
@@ -11,6 +11,9 @@ | |||
11 | #include <asm/io.h> | 11 | #include <asm/io.h> |
12 | #include <asm/mach-au1x00/au1000.h> | 12 | #include <asm/mach-au1x00/au1000.h> |
13 | 13 | ||
14 | struct gpio; | ||
15 | struct gpio_chip; | ||
16 | |||
14 | /* with the current GPIC design, up to 128 GPIOs are possible. | 17 | /* with the current GPIC design, up to 128 GPIOs are possible. |
15 | * The only implementation so far is in the Au1300, which has 75 externally | 18 | * The only implementation so far is in the Au1300, which has 75 externally |
16 | * available GPIOs. | 19 | * available GPIOs. |
@@ -203,7 +206,22 @@ static inline int gpio_request(unsigned int gpio, const char *label) | |||
203 | return 0; | 206 | return 0; |
204 | } | 207 | } |
205 | 208 | ||
206 | static inline void gpio_free(unsigned int gpio) | 209 | static inline int gpio_request_one(unsigned gpio, |
210 | unsigned long flags, const char *label) | ||
211 | { | ||
212 | return 0; | ||
213 | } | ||
214 | |||
215 | static inline int gpio_request_array(struct gpio *array, size_t num) | ||
216 | { | ||
217 | return 0; | ||
218 | } | ||
219 | |||
220 | static inline void gpio_free(unsigned gpio) | ||
221 | { | ||
222 | } | ||
223 | |||
224 | static inline void gpio_free_array(struct gpio *array, size_t num) | ||
207 | { | 225 | { |
208 | } | 226 | } |
209 | 227 | ||
diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h index d41790928c64..da9bd7d270d1 100644 --- a/arch/mips/include/asm/page.h +++ b/arch/mips/include/asm/page.h | |||
@@ -39,9 +39,6 @@ | |||
39 | #define HPAGE_MASK (~(HPAGE_SIZE - 1)) | 39 | #define HPAGE_MASK (~(HPAGE_SIZE - 1)) |
40 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) | 40 | #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT - PAGE_SHIFT) |
41 | #else /* !CONFIG_HUGETLB_PAGE */ | 41 | #else /* !CONFIG_HUGETLB_PAGE */ |
42 | # ifndef BUILD_BUG | ||
43 | # define BUILD_BUG() do { extern void __build_bug(void); __build_bug(); } while (0) | ||
44 | # endif | ||
45 | #define HPAGE_SHIFT ({BUILD_BUG(); 0; }) | 42 | #define HPAGE_SHIFT ({BUILD_BUG(); 0; }) |
46 | #define HPAGE_SIZE ({BUILD_BUG(); 0; }) | 43 | #define HPAGE_SIZE ({BUILD_BUG(); 0; }) |
47 | #define HPAGE_MASK ({BUILD_BUG(); 0; }) | 44 | #define HPAGE_MASK ({BUILD_BUG(); 0; }) |
diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c index 58fe71afd879..d5e950ab8527 100644 --- a/arch/mips/kernel/smp-bmips.c +++ b/arch/mips/kernel/smp-bmips.c | |||
@@ -8,7 +8,6 @@ | |||
8 | * SMP support for BMIPS | 8 | * SMP support for BMIPS |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/version.h> | ||
12 | #include <linux/init.h> | 11 | #include <linux/init.h> |
13 | #include <linux/sched.h> | 12 | #include <linux/sched.h> |
14 | #include <linux/mm.h> | 13 | #include <linux/mm.h> |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index cc4a3f120f54..d79ae5437b58 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
@@ -1135,7 +1135,7 @@ asmlinkage void do_mt(struct pt_regs *regs) | |||
1135 | printk(KERN_DEBUG "YIELD Scheduler Exception\n"); | 1135 | printk(KERN_DEBUG "YIELD Scheduler Exception\n"); |
1136 | break; | 1136 | break; |
1137 | case 5: | 1137 | case 5: |
1138 | printk(KERN_DEBUG "Gating Storage Schedulier Exception\n"); | 1138 | printk(KERN_DEBUG "Gating Storage Scheduler Exception\n"); |
1139 | break; | 1139 | break; |
1140 | default: | 1140 | default: |
1141 | printk(KERN_DEBUG "*** UNKNOWN THREAD EXCEPTION %d ***\n", | 1141 | printk(KERN_DEBUG "*** UNKNOWN THREAD EXCEPTION %d ***\n", |
diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index a81176f44c74..924da5eb7031 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S | |||
@@ -69,7 +69,6 @@ SECTIONS | |||
69 | RODATA | 69 | RODATA |
70 | 70 | ||
71 | /* writeable */ | 71 | /* writeable */ |
72 | _sdata = .; /* Start of data section */ | ||
73 | .data : { /* Data */ | 72 | .data : { /* Data */ |
74 | . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */ | 73 | . = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */ |
75 | 74 | ||
diff --git a/arch/mips/mm/fault.c b/arch/mips/mm/fault.c index 937cf3368164..69ebd586d7ff 100644 --- a/arch/mips/mm/fault.c +++ b/arch/mips/mm/fault.c | |||
@@ -42,6 +42,8 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ | |||
42 | const int field = sizeof(unsigned long) * 2; | 42 | const int field = sizeof(unsigned long) * 2; |
43 | siginfo_t info; | 43 | siginfo_t info; |
44 | int fault; | 44 | int fault; |
45 | unsigned int flags = FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE | | ||
46 | (write ? FAULT_FLAG_WRITE : 0); | ||
45 | 47 | ||
46 | #if 0 | 48 | #if 0 |
47 | printk("Cpu%d[%s:%d:%0*lx:%ld:%0*lx]\n", raw_smp_processor_id(), | 49 | printk("Cpu%d[%s:%d:%0*lx:%ld:%0*lx]\n", raw_smp_processor_id(), |
@@ -91,6 +93,7 @@ asmlinkage void __kprobes do_page_fault(struct pt_regs *regs, unsigned long writ | |||
91 | if (in_atomic() || !mm) | 93 | if (in_atomic() || !mm) |
92 | goto bad_area_nosemaphore; | 94 | goto bad_area_nosemaphore; |
93 | 95 | ||
96 | retry: | ||
94 | down_read(&mm->mmap_sem); | 97 | down_read(&mm->mmap_sem); |
95 | vma = find_vma(mm, address); | 98 | vma = find_vma(mm, address); |
96 | if (!vma) | 99 | if (!vma) |
@@ -144,7 +147,11 @@ good_area: | |||
144 | * make sure we exit gracefully rather than endlessly redo | 147 | * make sure we exit gracefully rather than endlessly redo |
145 | * the fault. | 148 | * the fault. |
146 | */ | 149 | */ |
147 | fault = handle_mm_fault(mm, vma, address, write ? FAULT_FLAG_WRITE : 0); | 150 | fault = handle_mm_fault(mm, vma, address, flags); |
151 | |||
152 | if ((fault & VM_FAULT_RETRY) && fatal_signal_pending(current)) | ||
153 | return; | ||
154 | |||
148 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); | 155 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS, 1, regs, address); |
149 | if (unlikely(fault & VM_FAULT_ERROR)) { | 156 | if (unlikely(fault & VM_FAULT_ERROR)) { |
150 | if (fault & VM_FAULT_OOM) | 157 | if (fault & VM_FAULT_OOM) |
@@ -153,12 +160,27 @@ good_area: | |||
153 | goto do_sigbus; | 160 | goto do_sigbus; |
154 | BUG(); | 161 | BUG(); |
155 | } | 162 | } |
156 | if (fault & VM_FAULT_MAJOR) { | 163 | if (flags & FAULT_FLAG_ALLOW_RETRY) { |
157 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, regs, address); | 164 | if (fault & VM_FAULT_MAJOR) { |
158 | tsk->maj_flt++; | 165 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, |
159 | } else { | 166 | regs, address); |
160 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, regs, address); | 167 | tsk->maj_flt++; |
161 | tsk->min_flt++; | 168 | } else { |
169 | perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, | ||
170 | regs, address); | ||
171 | tsk->min_flt++; | ||
172 | } | ||
173 | if (fault & VM_FAULT_RETRY) { | ||
174 | flags &= ~FAULT_FLAG_ALLOW_RETRY; | ||
175 | |||
176 | /* | ||
177 | * No need to up_read(&mm->mmap_sem) as we would | ||
178 | * have already released it in __lock_page_or_retry | ||
179 | * in mm/filemap.c. | ||
180 | */ | ||
181 | |||
182 | goto retry; | ||
183 | } | ||
162 | } | 184 | } |
163 | 185 | ||
164 | up_read(&mm->mmap_sem); | 186 | up_read(&mm->mmap_sem); |
diff --git a/arch/mips/pci/pci.c b/arch/mips/pci/pci.c index aec2b111d35b..15521505ebe8 100644 --- a/arch/mips/pci/pci.c +++ b/arch/mips/pci/pci.c | |||
@@ -279,7 +279,6 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus) | |||
279 | { | 279 | { |
280 | /* Propagate hose info into the subordinate devices. */ | 280 | /* Propagate hose info into the subordinate devices. */ |
281 | 281 | ||
282 | struct list_head *ln; | ||
283 | struct pci_dev *dev = bus->self; | 282 | struct pci_dev *dev = bus->self; |
284 | 283 | ||
285 | if (pci_probe_only && dev && | 284 | if (pci_probe_only && dev && |
@@ -288,9 +287,7 @@ void __devinit pcibios_fixup_bus(struct pci_bus *bus) | |||
288 | pcibios_fixup_device_resources(dev, bus); | 287 | pcibios_fixup_device_resources(dev, bus); |
289 | } | 288 | } |
290 | 289 | ||
291 | for (ln = bus->devices.next; ln != &bus->devices; ln = ln->next) { | 290 | list_for_each_entry(dev, &bus->devices, bus_list) { |
292 | dev = pci_dev_b(ln); | ||
293 | |||
294 | if ((dev->class >> 8) != PCI_CLASS_BRIDGE_PCI) | 291 | if ((dev->class >> 8) != PCI_CLASS_BRIDGE_PCI) |
295 | pcibios_fixup_device_resources(dev, bus); | 292 | pcibios_fixup_device_resources(dev, bus); |
296 | } | 293 | } |
diff --git a/arch/mips/pmc-sierra/yosemite/ht-irq.c b/arch/mips/pmc-sierra/yosemite/ht-irq.c index 86b98e98fb4f..62ead6601c69 100644 --- a/arch/mips/pmc-sierra/yosemite/ht-irq.c +++ b/arch/mips/pmc-sierra/yosemite/ht-irq.c | |||
@@ -35,16 +35,6 @@ | |||
35 | */ | 35 | */ |
36 | void __init titan_ht_pcibios_fixup_bus(struct pci_bus *bus) | 36 | void __init titan_ht_pcibios_fixup_bus(struct pci_bus *bus) |
37 | { | 37 | { |
38 | struct pci_bus *current_bus = bus; | ||
39 | struct pci_dev *devices; | ||
40 | struct list_head *devices_link; | ||
41 | |||
42 | list_for_each(devices_link, &(current_bus->devices)) { | ||
43 | devices = pci_dev_b(devices_link); | ||
44 | if (devices == NULL) | ||
45 | continue; | ||
46 | } | ||
47 | |||
48 | /* | 38 | /* |
49 | * PLX and SPKT related changes go here | 39 | * PLX and SPKT related changes go here |
50 | */ | 40 | */ |
diff --git a/arch/mips/txx9/generic/7segled.c b/arch/mips/txx9/generic/7segled.c index 8e93b2122524..4642f56e70e5 100644 --- a/arch/mips/txx9/generic/7segled.c +++ b/arch/mips/txx9/generic/7segled.c | |||
@@ -102,7 +102,7 @@ static int __init tx_7segled_init_sysfs(void) | |||
102 | break; | 102 | break; |
103 | } | 103 | } |
104 | dev->id = i; | 104 | dev->id = i; |
105 | dev->dev = &tx_7segled_subsys; | 105 | dev->bus = &tx_7segled_subsys; |
106 | error = device_register(dev); | 106 | error = device_register(dev); |
107 | if (!error) { | 107 | if (!error) { |
108 | device_create_file(dev, &dev_attr_ascii); | 108 | device_create_file(dev, &dev_attr_ascii); |
diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c index fd843877e841..39e49091f648 100644 --- a/arch/x86/ia32/ia32_aout.c +++ b/arch/x86/ia32/ia32_aout.c | |||
@@ -315,6 +315,13 @@ static int load_aout_binary(struct linux_binprm *bprm, struct pt_regs *regs) | |||
315 | current->mm->free_area_cache = TASK_UNMAPPED_BASE; | 315 | current->mm->free_area_cache = TASK_UNMAPPED_BASE; |
316 | current->mm->cached_hole_size = 0; | 316 | current->mm->cached_hole_size = 0; |
317 | 317 | ||
318 | retval = setup_arg_pages(bprm, IA32_STACK_TOP, EXSTACK_DEFAULT); | ||
319 | if (retval < 0) { | ||
320 | /* Someone check-me: is this error path enough? */ | ||
321 | send_sig(SIGKILL, current, 0); | ||
322 | return retval; | ||
323 | } | ||
324 | |||
318 | install_exec_creds(bprm); | 325 | install_exec_creds(bprm); |
319 | current->flags &= ~PF_FORKNOEXEC; | 326 | current->flags &= ~PF_FORKNOEXEC; |
320 | 327 | ||
@@ -410,13 +417,6 @@ beyond_if: | |||
410 | 417 | ||
411 | set_brk(current->mm->start_brk, current->mm->brk); | 418 | set_brk(current->mm->start_brk, current->mm->brk); |
412 | 419 | ||
413 | retval = setup_arg_pages(bprm, IA32_STACK_TOP, EXSTACK_DEFAULT); | ||
414 | if (retval < 0) { | ||
415 | /* Someone check-me: is this error path enough? */ | ||
416 | send_sig(SIGKILL, current, 0); | ||
417 | return retval; | ||
418 | } | ||
419 | |||
420 | current->mm->start_stack = | 420 | current->mm->start_stack = |
421 | (unsigned long)create_aout_tables((char __user *)bprm->p, bprm); | 421 | (unsigned long)create_aout_tables((char __user *)bprm->p, bprm); |
422 | /* start thread */ | 422 | /* start thread */ |
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index a312e76063a7..49a5cb55429b 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c | |||
@@ -60,6 +60,16 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = { | |||
60 | DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."), | 60 | DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."), |
61 | }, | 61 | }, |
62 | }, | 62 | }, |
63 | /* https://bugzilla.kernel.org/show_bug.cgi?id=42619 */ | ||
64 | { | ||
65 | .callback = set_use_crs, | ||
66 | .ident = "MSI MS-7253", | ||
67 | .matches = { | ||
68 | DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), | ||
69 | DMI_MATCH(DMI_BOARD_NAME, "MS-7253"), | ||
70 | DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies, LTD"), | ||
71 | }, | ||
72 | }, | ||
63 | 73 | ||
64 | /* Now for the blacklist.. */ | 74 | /* Now for the blacklist.. */ |
65 | 75 | ||
@@ -282,9 +292,6 @@ static void add_resources(struct pci_root_info *info) | |||
282 | int i; | 292 | int i; |
283 | struct resource *res, *root, *conflict; | 293 | struct resource *res, *root, *conflict; |
284 | 294 | ||
285 | if (!pci_use_crs) | ||
286 | return; | ||
287 | |||
288 | coalesce_windows(info, IORESOURCE_MEM); | 295 | coalesce_windows(info, IORESOURCE_MEM); |
289 | coalesce_windows(info, IORESOURCE_IO); | 296 | coalesce_windows(info, IORESOURCE_IO); |
290 | 297 | ||
@@ -336,8 +343,13 @@ get_current_resources(struct acpi_device *device, int busnum, | |||
336 | acpi_walk_resources(device->handle, METHOD_NAME__CRS, setup_resource, | 343 | acpi_walk_resources(device->handle, METHOD_NAME__CRS, setup_resource, |
337 | &info); | 344 | &info); |
338 | 345 | ||
339 | add_resources(&info); | 346 | if (pci_use_crs) { |
340 | return; | 347 | add_resources(&info); |
348 | |||
349 | return; | ||
350 | } | ||
351 | |||
352 | kfree(info.name); | ||
341 | 353 | ||
342 | name_alloc_fail: | 354 | name_alloc_fail: |
343 | kfree(info.res); | 355 | kfree(info.res); |
diff --git a/drivers/gpu/drm/gma500/cdv_device.c b/drivers/gpu/drm/gma500/cdv_device.c index 4a5b099c3bc5..53404af2e748 100644 --- a/drivers/gpu/drm/gma500/cdv_device.c +++ b/drivers/gpu/drm/gma500/cdv_device.c | |||
@@ -321,6 +321,8 @@ static int cdv_chip_setup(struct drm_device *dev) | |||
321 | cdv_get_core_freq(dev); | 321 | cdv_get_core_freq(dev); |
322 | gma_intel_opregion_init(dev); | 322 | gma_intel_opregion_init(dev); |
323 | psb_intel_init_bios(dev); | 323 | psb_intel_init_bios(dev); |
324 | REG_WRITE(PORT_HOTPLUG_EN, 0); | ||
325 | REG_WRITE(PORT_HOTPLUG_STAT, REG_READ(PORT_HOTPLUG_STAT)); | ||
324 | return 0; | 326 | return 0; |
325 | } | 327 | } |
326 | 328 | ||
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c index 830dfdd6bf15..be616735ec91 100644 --- a/drivers/gpu/drm/gma500/framebuffer.c +++ b/drivers/gpu/drm/gma500/framebuffer.c | |||
@@ -247,7 +247,6 @@ static struct fb_ops psbfb_roll_ops = { | |||
247 | .fb_imageblit = cfb_imageblit, | 247 | .fb_imageblit = cfb_imageblit, |
248 | .fb_pan_display = psbfb_pan, | 248 | .fb_pan_display = psbfb_pan, |
249 | .fb_mmap = psbfb_mmap, | 249 | .fb_mmap = psbfb_mmap, |
250 | .fb_sync = psbfb_sync, | ||
251 | .fb_ioctl = psbfb_ioctl, | 250 | .fb_ioctl = psbfb_ioctl, |
252 | }; | 251 | }; |
253 | 252 | ||
diff --git a/drivers/gpu/drm/gma500/gtt.c b/drivers/gpu/drm/gma500/gtt.c index 5d5330f667f1..aff194fbe9f3 100644 --- a/drivers/gpu/drm/gma500/gtt.c +++ b/drivers/gpu/drm/gma500/gtt.c | |||
@@ -446,10 +446,9 @@ int psb_gtt_init(struct drm_device *dev, int resume) | |||
446 | pg->gtt_start = pci_resource_start(dev->pdev, PSB_GTT_RESOURCE); | 446 | pg->gtt_start = pci_resource_start(dev->pdev, PSB_GTT_RESOURCE); |
447 | gtt_pages = pci_resource_len(dev->pdev, PSB_GTT_RESOURCE) | 447 | gtt_pages = pci_resource_len(dev->pdev, PSB_GTT_RESOURCE) |
448 | >> PAGE_SHIFT; | 448 | >> PAGE_SHIFT; |
449 | /* Some CDV firmware doesn't report this currently. In which case the | 449 | /* CDV doesn't report this. In which case the system has 64 gtt pages */ |
450 | system has 64 gtt pages */ | ||
451 | if (pg->gtt_start == 0 || gtt_pages == 0) { | 450 | if (pg->gtt_start == 0 || gtt_pages == 0) { |
452 | dev_err(dev->dev, "GTT PCI BAR not initialized.\n"); | 451 | dev_dbg(dev->dev, "GTT PCI BAR not initialized.\n"); |
453 | gtt_pages = 64; | 452 | gtt_pages = 64; |
454 | pg->gtt_start = dev_priv->pge_ctl; | 453 | pg->gtt_start = dev_priv->pge_ctl; |
455 | } | 454 | } |
@@ -461,10 +460,10 @@ int psb_gtt_init(struct drm_device *dev, int resume) | |||
461 | 460 | ||
462 | if (pg->gatt_pages == 0 || pg->gatt_start == 0) { | 461 | if (pg->gatt_pages == 0 || pg->gatt_start == 0) { |
463 | static struct resource fudge; /* Preferably peppermint */ | 462 | static struct resource fudge; /* Preferably peppermint */ |
464 | /* This can occur on CDV SDV systems. Fudge it in this case. | 463 | /* This can occur on CDV systems. Fudge it in this case. |
465 | We really don't care what imaginary space is being allocated | 464 | We really don't care what imaginary space is being allocated |
466 | at this point */ | 465 | at this point */ |
467 | dev_err(dev->dev, "GATT PCI BAR not initialized.\n"); | 466 | dev_dbg(dev->dev, "GATT PCI BAR not initialized.\n"); |
468 | pg->gatt_start = 0x40000000; | 467 | pg->gatt_start = 0x40000000; |
469 | pg->gatt_pages = (128 * 1024 * 1024) >> PAGE_SHIFT; | 468 | pg->gatt_pages = (128 * 1024 * 1024) >> PAGE_SHIFT; |
470 | /* This is a little confusing but in fact the GTT is providing | 469 | /* This is a little confusing but in fact the GTT is providing |
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c index a1f2e0fed78b..423d0235a878 100644 --- a/drivers/net/ethernet/broadcom/tg3.c +++ b/drivers/net/ethernet/broadcom/tg3.c | |||
@@ -7886,10 +7886,8 @@ static int tg3_chip_reset(struct tg3 *tp) | |||
7886 | return 0; | 7886 | return 0; |
7887 | } | 7887 | } |
7888 | 7888 | ||
7889 | static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *, | 7889 | static void tg3_get_nstats(struct tg3 *, struct rtnl_link_stats64 *); |
7890 | struct rtnl_link_stats64 *); | 7890 | static void tg3_get_estats(struct tg3 *, struct tg3_ethtool_stats *); |
7891 | static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *, | ||
7892 | struct tg3_ethtool_stats *); | ||
7893 | 7891 | ||
7894 | /* tp->lock is held. */ | 7892 | /* tp->lock is held. */ |
7895 | static int tg3_halt(struct tg3 *tp, int kind, int silent) | 7893 | static int tg3_halt(struct tg3 *tp, int kind, int silent) |
@@ -7910,7 +7908,7 @@ static int tg3_halt(struct tg3 *tp, int kind, int silent) | |||
7910 | 7908 | ||
7911 | if (tp->hw_stats) { | 7909 | if (tp->hw_stats) { |
7912 | /* Save the stats across chip resets... */ | 7910 | /* Save the stats across chip resets... */ |
7913 | tg3_get_stats64(tp->dev, &tp->net_stats_prev), | 7911 | tg3_get_nstats(tp, &tp->net_stats_prev), |
7914 | tg3_get_estats(tp, &tp->estats_prev); | 7912 | tg3_get_estats(tp, &tp->estats_prev); |
7915 | 7913 | ||
7916 | /* And make sure the next sample is new data */ | 7914 | /* And make sure the next sample is new data */ |
@@ -9847,7 +9845,7 @@ static inline u64 get_stat64(tg3_stat64_t *val) | |||
9847 | return ((u64)val->high << 32) | ((u64)val->low); | 9845 | return ((u64)val->high << 32) | ((u64)val->low); |
9848 | } | 9846 | } |
9849 | 9847 | ||
9850 | static u64 calc_crc_errors(struct tg3 *tp) | 9848 | static u64 tg3_calc_crc_errors(struct tg3 *tp) |
9851 | { | 9849 | { |
9852 | struct tg3_hw_stats *hw_stats = tp->hw_stats; | 9850 | struct tg3_hw_stats *hw_stats = tp->hw_stats; |
9853 | 9851 | ||
@@ -9856,14 +9854,12 @@ static u64 calc_crc_errors(struct tg3 *tp) | |||
9856 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { | 9854 | GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)) { |
9857 | u32 val; | 9855 | u32 val; |
9858 | 9856 | ||
9859 | spin_lock_bh(&tp->lock); | ||
9860 | if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { | 9857 | if (!tg3_readphy(tp, MII_TG3_TEST1, &val)) { |
9861 | tg3_writephy(tp, MII_TG3_TEST1, | 9858 | tg3_writephy(tp, MII_TG3_TEST1, |
9862 | val | MII_TG3_TEST1_CRC_EN); | 9859 | val | MII_TG3_TEST1_CRC_EN); |
9863 | tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); | 9860 | tg3_readphy(tp, MII_TG3_RXR_COUNTERS, &val); |
9864 | } else | 9861 | } else |
9865 | val = 0; | 9862 | val = 0; |
9866 | spin_unlock_bh(&tp->lock); | ||
9867 | 9863 | ||
9868 | tp->phy_crc_errors += val; | 9864 | tp->phy_crc_errors += val; |
9869 | 9865 | ||
@@ -9877,14 +9873,13 @@ static u64 calc_crc_errors(struct tg3 *tp) | |||
9877 | estats->member = old_estats->member + \ | 9873 | estats->member = old_estats->member + \ |
9878 | get_stat64(&hw_stats->member) | 9874 | get_stat64(&hw_stats->member) |
9879 | 9875 | ||
9880 | static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp, | 9876 | static void tg3_get_estats(struct tg3 *tp, struct tg3_ethtool_stats *estats) |
9881 | struct tg3_ethtool_stats *estats) | ||
9882 | { | 9877 | { |
9883 | struct tg3_ethtool_stats *old_estats = &tp->estats_prev; | 9878 | struct tg3_ethtool_stats *old_estats = &tp->estats_prev; |
9884 | struct tg3_hw_stats *hw_stats = tp->hw_stats; | 9879 | struct tg3_hw_stats *hw_stats = tp->hw_stats; |
9885 | 9880 | ||
9886 | if (!hw_stats) | 9881 | if (!hw_stats) |
9887 | return old_estats; | 9882 | return; |
9888 | 9883 | ||
9889 | ESTAT_ADD(rx_octets); | 9884 | ESTAT_ADD(rx_octets); |
9890 | ESTAT_ADD(rx_fragments); | 9885 | ESTAT_ADD(rx_fragments); |
@@ -9963,20 +9958,13 @@ static struct tg3_ethtool_stats *tg3_get_estats(struct tg3 *tp, | |||
9963 | ESTAT_ADD(nic_tx_threshold_hit); | 9958 | ESTAT_ADD(nic_tx_threshold_hit); |
9964 | 9959 | ||
9965 | ESTAT_ADD(mbuf_lwm_thresh_hit); | 9960 | ESTAT_ADD(mbuf_lwm_thresh_hit); |
9966 | |||
9967 | return estats; | ||
9968 | } | 9961 | } |
9969 | 9962 | ||
9970 | static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, | 9963 | static void tg3_get_nstats(struct tg3 *tp, struct rtnl_link_stats64 *stats) |
9971 | struct rtnl_link_stats64 *stats) | ||
9972 | { | 9964 | { |
9973 | struct tg3 *tp = netdev_priv(dev); | ||
9974 | struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; | 9965 | struct rtnl_link_stats64 *old_stats = &tp->net_stats_prev; |
9975 | struct tg3_hw_stats *hw_stats = tp->hw_stats; | 9966 | struct tg3_hw_stats *hw_stats = tp->hw_stats; |
9976 | 9967 | ||
9977 | if (!hw_stats) | ||
9978 | return old_stats; | ||
9979 | |||
9980 | stats->rx_packets = old_stats->rx_packets + | 9968 | stats->rx_packets = old_stats->rx_packets + |
9981 | get_stat64(&hw_stats->rx_ucast_packets) + | 9969 | get_stat64(&hw_stats->rx_ucast_packets) + |
9982 | get_stat64(&hw_stats->rx_mcast_packets) + | 9970 | get_stat64(&hw_stats->rx_mcast_packets) + |
@@ -10019,15 +10007,13 @@ static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, | |||
10019 | get_stat64(&hw_stats->tx_carrier_sense_errors); | 10007 | get_stat64(&hw_stats->tx_carrier_sense_errors); |
10020 | 10008 | ||
10021 | stats->rx_crc_errors = old_stats->rx_crc_errors + | 10009 | stats->rx_crc_errors = old_stats->rx_crc_errors + |
10022 | calc_crc_errors(tp); | 10010 | tg3_calc_crc_errors(tp); |
10023 | 10011 | ||
10024 | stats->rx_missed_errors = old_stats->rx_missed_errors + | 10012 | stats->rx_missed_errors = old_stats->rx_missed_errors + |
10025 | get_stat64(&hw_stats->rx_discards); | 10013 | get_stat64(&hw_stats->rx_discards); |
10026 | 10014 | ||
10027 | stats->rx_dropped = tp->rx_dropped; | 10015 | stats->rx_dropped = tp->rx_dropped; |
10028 | stats->tx_dropped = tp->tx_dropped; | 10016 | stats->tx_dropped = tp->tx_dropped; |
10029 | |||
10030 | return stats; | ||
10031 | } | 10017 | } |
10032 | 10018 | ||
10033 | static inline u32 calc_crc(unsigned char *buf, int len) | 10019 | static inline u32 calc_crc(unsigned char *buf, int len) |
@@ -15409,6 +15395,21 @@ static void __devinit tg3_init_coal(struct tg3 *tp) | |||
15409 | } | 15395 | } |
15410 | } | 15396 | } |
15411 | 15397 | ||
15398 | static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev, | ||
15399 | struct rtnl_link_stats64 *stats) | ||
15400 | { | ||
15401 | struct tg3 *tp = netdev_priv(dev); | ||
15402 | |||
15403 | if (!tp->hw_stats) | ||
15404 | return &tp->net_stats_prev; | ||
15405 | |||
15406 | spin_lock_bh(&tp->lock); | ||
15407 | tg3_get_nstats(tp, stats); | ||
15408 | spin_unlock_bh(&tp->lock); | ||
15409 | |||
15410 | return stats; | ||
15411 | } | ||
15412 | |||
15412 | static const struct net_device_ops tg3_netdev_ops = { | 15413 | static const struct net_device_ops tg3_netdev_ops = { |
15413 | .ndo_open = tg3_open, | 15414 | .ndo_open = tg3_open, |
15414 | .ndo_stop = tg3_close, | 15415 | .ndo_stop = tg3_close, |
diff --git a/drivers/net/ethernet/cisco/enic/enic.h b/drivers/net/ethernet/cisco/enic/enic.h index ee93a2087fe6..c52295cd05ef 100644 --- a/drivers/net/ethernet/cisco/enic/enic.h +++ b/drivers/net/ethernet/cisco/enic/enic.h | |||
@@ -94,7 +94,7 @@ struct enic { | |||
94 | u32 rx_coalesce_usecs; | 94 | u32 rx_coalesce_usecs; |
95 | u32 tx_coalesce_usecs; | 95 | u32 tx_coalesce_usecs; |
96 | #ifdef CONFIG_PCI_IOV | 96 | #ifdef CONFIG_PCI_IOV |
97 | u32 num_vfs; | 97 | u16 num_vfs; |
98 | #endif | 98 | #endif |
99 | struct enic_port_profile *pp; | 99 | struct enic_port_profile *pp; |
100 | 100 | ||
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c index ab3f67f980d8..0e4edd3b6bee 100644 --- a/drivers/net/ethernet/cisco/enic/enic_main.c +++ b/drivers/net/ethernet/cisco/enic/enic_main.c | |||
@@ -2370,7 +2370,7 @@ static int __devinit enic_probe(struct pci_dev *pdev, | |||
2370 | pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV); | 2370 | pos = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_SRIOV); |
2371 | if (pos) { | 2371 | if (pos) { |
2372 | pci_read_config_word(pdev, pos + PCI_SRIOV_TOTAL_VF, | 2372 | pci_read_config_word(pdev, pos + PCI_SRIOV_TOTAL_VF, |
2373 | (u16 *)&enic->num_vfs); | 2373 | &enic->num_vfs); |
2374 | if (enic->num_vfs) { | 2374 | if (enic->num_vfs) { |
2375 | err = pci_enable_sriov(pdev, enic->num_vfs); | 2375 | err = pci_enable_sriov(pdev, enic->num_vfs); |
2376 | if (err) { | 2376 | if (err) { |
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c index 9cb5f912e489..29e23bec809c 100644 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c | |||
@@ -321,10 +321,10 @@ static void pch_gbe_check_copper_options(struct pch_gbe_adapter *adapter) | |||
321 | pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n"); | 321 | pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n"); |
322 | hw->phy.autoneg_advertised = opt.def; | 322 | hw->phy.autoneg_advertised = opt.def; |
323 | } else { | 323 | } else { |
324 | hw->phy.autoneg_advertised = AutoNeg; | 324 | int tmp = AutoNeg; |
325 | pch_gbe_validate_option( | 325 | |
326 | (int *)(&hw->phy.autoneg_advertised), | 326 | pch_gbe_validate_option(&tmp, &opt, adapter); |
327 | &opt, adapter); | 327 | hw->phy.autoneg_advertised = tmp; |
328 | } | 328 | } |
329 | } | 329 | } |
330 | 330 | ||
@@ -495,9 +495,10 @@ void pch_gbe_check_options(struct pch_gbe_adapter *adapter) | |||
495 | .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list), | 495 | .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list), |
496 | .p = fc_list } } | 496 | .p = fc_list } } |
497 | }; | 497 | }; |
498 | hw->mac.fc = FlowControl; | 498 | int tmp = FlowControl; |
499 | pch_gbe_validate_option((int *)(&hw->mac.fc), | 499 | |
500 | &opt, adapter); | 500 | pch_gbe_validate_option(&tmp, &opt, adapter); |
501 | hw->mac.fc = tmp; | ||
501 | } | 502 | } |
502 | 503 | ||
503 | pch_gbe_check_copper_options(adapter); | 504 | pch_gbe_check_copper_options(adapter); |
diff --git a/drivers/net/ethernet/packetengines/Kconfig b/drivers/net/ethernet/packetengines/Kconfig index b97132d9dff0..8f29feb35548 100644 --- a/drivers/net/ethernet/packetengines/Kconfig +++ b/drivers/net/ethernet/packetengines/Kconfig | |||
@@ -4,6 +4,7 @@ | |||
4 | 4 | ||
5 | config NET_PACKET_ENGINE | 5 | config NET_PACKET_ENGINE |
6 | bool "Packet Engine devices" | 6 | bool "Packet Engine devices" |
7 | default y | ||
7 | depends on PCI | 8 | depends on PCI |
8 | ---help--- | 9 | ---help--- |
9 | If you have a network (Ethernet) card belonging to this class, say Y | 10 | If you have a network (Ethernet) card belonging to this class, say Y |
diff --git a/drivers/net/ethernet/qlogic/qla3xxx.c b/drivers/net/ethernet/qlogic/qla3xxx.c index 7931531c3a40..e61560e16385 100644 --- a/drivers/net/ethernet/qlogic/qla3xxx.c +++ b/drivers/net/ethernet/qlogic/qla3xxx.c | |||
@@ -3017,7 +3017,6 @@ static int ql_adapter_initialize(struct ql3_adapter *qdev) | |||
3017 | (void __iomem *)port_regs; | 3017 | (void __iomem *)port_regs; |
3018 | u32 delay = 10; | 3018 | u32 delay = 10; |
3019 | int status = 0; | 3019 | int status = 0; |
3020 | unsigned long hw_flags = 0; | ||
3021 | 3020 | ||
3022 | if (ql_mii_setup(qdev)) | 3021 | if (ql_mii_setup(qdev)) |
3023 | return -1; | 3022 | return -1; |
@@ -3228,9 +3227,9 @@ static int ql_adapter_initialize(struct ql3_adapter *qdev) | |||
3228 | value = ql_read_page0_reg(qdev, &port_regs->portStatus); | 3227 | value = ql_read_page0_reg(qdev, &port_regs->portStatus); |
3229 | if (value & PORT_STATUS_IC) | 3228 | if (value & PORT_STATUS_IC) |
3230 | break; | 3229 | break; |
3231 | spin_unlock_irqrestore(&qdev->hw_lock, hw_flags); | 3230 | spin_unlock_irq(&qdev->hw_lock); |
3232 | msleep(500); | 3231 | msleep(500); |
3233 | spin_lock_irqsave(&qdev->hw_lock, hw_flags); | 3232 | spin_lock_irq(&qdev->hw_lock); |
3234 | } while (--delay); | 3233 | } while (--delay); |
3235 | 3234 | ||
3236 | if (delay == 0) { | 3235 | if (delay == 0) { |
diff --git a/drivers/net/ethernet/realtek/r8169.c b/drivers/net/ethernet/realtek/r8169.c index 7a0c800b50ad..1adf17757cea 100644 --- a/drivers/net/ethernet/realtek/r8169.c +++ b/drivers/net/ethernet/realtek/r8169.c | |||
@@ -3781,12 +3781,20 @@ static void rtl8169_init_ring_indexes(struct rtl8169_private *tp) | |||
3781 | 3781 | ||
3782 | static void rtl_hw_jumbo_enable(struct rtl8169_private *tp) | 3782 | static void rtl_hw_jumbo_enable(struct rtl8169_private *tp) |
3783 | { | 3783 | { |
3784 | void __iomem *ioaddr = tp->mmio_addr; | ||
3785 | |||
3786 | RTL_W8(Cfg9346, Cfg9346_Unlock); | ||
3784 | rtl_generic_op(tp, tp->jumbo_ops.enable); | 3787 | rtl_generic_op(tp, tp->jumbo_ops.enable); |
3788 | RTL_W8(Cfg9346, Cfg9346_Lock); | ||
3785 | } | 3789 | } |
3786 | 3790 | ||
3787 | static void rtl_hw_jumbo_disable(struct rtl8169_private *tp) | 3791 | static void rtl_hw_jumbo_disable(struct rtl8169_private *tp) |
3788 | { | 3792 | { |
3793 | void __iomem *ioaddr = tp->mmio_addr; | ||
3794 | |||
3795 | RTL_W8(Cfg9346, Cfg9346_Unlock); | ||
3789 | rtl_generic_op(tp, tp->jumbo_ops.disable); | 3796 | rtl_generic_op(tp, tp->jumbo_ops.disable); |
3797 | RTL_W8(Cfg9346, Cfg9346_Lock); | ||
3790 | } | 3798 | } |
3791 | 3799 | ||
3792 | static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp) | 3800 | static void r8168c_hw_jumbo_enable(struct rtl8169_private *tp) |
diff --git a/drivers/net/vmxnet3/vmxnet3_drv.c b/drivers/net/vmxnet3/vmxnet3_drv.c index 3dcd3857a36c..756c0f5565a5 100644 --- a/drivers/net/vmxnet3/vmxnet3_drv.c +++ b/drivers/net/vmxnet3/vmxnet3_drv.c | |||
@@ -830,13 +830,8 @@ vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq, | |||
830 | ctx->l4_hdr_size = ((struct tcphdr *) | 830 | ctx->l4_hdr_size = ((struct tcphdr *) |
831 | skb_transport_header(skb))->doff * 4; | 831 | skb_transport_header(skb))->doff * 4; |
832 | else if (iph->protocol == IPPROTO_UDP) | 832 | else if (iph->protocol == IPPROTO_UDP) |
833 | /* | ||
834 | * Use tcp header size so that bytes to | ||
835 | * be copied are more than required by | ||
836 | * the device. | ||
837 | */ | ||
838 | ctx->l4_hdr_size = | 833 | ctx->l4_hdr_size = |
839 | sizeof(struct tcphdr); | 834 | sizeof(struct udphdr); |
840 | else | 835 | else |
841 | ctx->l4_hdr_size = 0; | 836 | ctx->l4_hdr_size = 0; |
842 | } else { | 837 | } else { |
diff --git a/drivers/net/vmxnet3/vmxnet3_int.h b/drivers/net/vmxnet3/vmxnet3_int.h index ed54797db191..fc46a81ad538 100644 --- a/drivers/net/vmxnet3/vmxnet3_int.h +++ b/drivers/net/vmxnet3/vmxnet3_int.h | |||
@@ -70,10 +70,10 @@ | |||
70 | /* | 70 | /* |
71 | * Version numbers | 71 | * Version numbers |
72 | */ | 72 | */ |
73 | #define VMXNET3_DRIVER_VERSION_STRING "1.1.18.0-k" | 73 | #define VMXNET3_DRIVER_VERSION_STRING "1.1.29.0-k" |
74 | 74 | ||
75 | /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */ | 75 | /* a 32-bit int, each byte encode a verion number in VMXNET3_DRIVER_VERSION */ |
76 | #define VMXNET3_DRIVER_VERSION_NUM 0x01011200 | 76 | #define VMXNET3_DRIVER_VERSION_NUM 0x01011D00 |
77 | 77 | ||
78 | #if defined(CONFIG_PCI_MSI) | 78 | #if defined(CONFIG_PCI_MSI) |
79 | /* RSS only makes sense if MSI-X is supported. */ | 79 | /* RSS only makes sense if MSI-X is supported. */ |
diff --git a/drivers/net/wireless/ath/ath9k/ar5008_phy.c b/drivers/net/wireless/ath/ath9k/ar5008_phy.c index f901a17f76ba..86a891f93fc9 100644 --- a/drivers/net/wireless/ath/ath9k/ar5008_phy.c +++ b/drivers/net/wireless/ath/ath9k/ar5008_phy.c | |||
@@ -489,8 +489,6 @@ static int ar5008_hw_rf_alloc_ext_banks(struct ath_hw *ah) | |||
489 | ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); | 489 | ATH_ALLOC_BANK(ah->analogBank6Data, ah->iniBank6.ia_rows); |
490 | ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); | 490 | ATH_ALLOC_BANK(ah->analogBank6TPCData, ah->iniBank6TPC.ia_rows); |
491 | ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); | 491 | ATH_ALLOC_BANK(ah->analogBank7Data, ah->iniBank7.ia_rows); |
492 | ATH_ALLOC_BANK(ah->addac5416_21, | ||
493 | ah->iniAddac.ia_rows * ah->iniAddac.ia_columns); | ||
494 | ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); | 492 | ATH_ALLOC_BANK(ah->bank6Temp, ah->iniBank6.ia_rows); |
495 | 493 | ||
496 | return 0; | 494 | return 0; |
@@ -519,7 +517,6 @@ static void ar5008_hw_rf_free_ext_banks(struct ath_hw *ah) | |||
519 | ATH_FREE_BANK(ah->analogBank6Data); | 517 | ATH_FREE_BANK(ah->analogBank6Data); |
520 | ATH_FREE_BANK(ah->analogBank6TPCData); | 518 | ATH_FREE_BANK(ah->analogBank6TPCData); |
521 | ATH_FREE_BANK(ah->analogBank7Data); | 519 | ATH_FREE_BANK(ah->analogBank7Data); |
522 | ATH_FREE_BANK(ah->addac5416_21); | ||
523 | ATH_FREE_BANK(ah->bank6Temp); | 520 | ATH_FREE_BANK(ah->bank6Temp); |
524 | 521 | ||
525 | #undef ATH_FREE_BANK | 522 | #undef ATH_FREE_BANK |
@@ -805,27 +802,7 @@ static int ar5008_hw_process_ini(struct ath_hw *ah, | |||
805 | if (ah->eep_ops->set_addac) | 802 | if (ah->eep_ops->set_addac) |
806 | ah->eep_ops->set_addac(ah, chan); | 803 | ah->eep_ops->set_addac(ah, chan); |
807 | 804 | ||
808 | if (AR_SREV_5416_22_OR_LATER(ah)) { | 805 | REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites); |
809 | REG_WRITE_ARRAY(&ah->iniAddac, 1, regWrites); | ||
810 | } else { | ||
811 | struct ar5416IniArray temp; | ||
812 | u32 addacSize = | ||
813 | sizeof(u32) * ah->iniAddac.ia_rows * | ||
814 | ah->iniAddac.ia_columns; | ||
815 | |||
816 | /* For AR5416 2.0/2.1 */ | ||
817 | memcpy(ah->addac5416_21, | ||
818 | ah->iniAddac.ia_array, addacSize); | ||
819 | |||
820 | /* override CLKDRV value at [row, column] = [31, 1] */ | ||
821 | (ah->addac5416_21)[31 * ah->iniAddac.ia_columns + 1] = 0; | ||
822 | |||
823 | temp.ia_array = ah->addac5416_21; | ||
824 | temp.ia_columns = ah->iniAddac.ia_columns; | ||
825 | temp.ia_rows = ah->iniAddac.ia_rows; | ||
826 | REG_WRITE_ARRAY(&temp, 1, regWrites); | ||
827 | } | ||
828 | |||
829 | REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC); | 806 | REG_WRITE(ah, AR_PHY_ADC_SERIAL_CTL, AR_PHY_SEL_INTERNAL_ADDAC); |
830 | 807 | ||
831 | ENABLE_REGWRITE_BUFFER(ah); | 808 | ENABLE_REGWRITE_BUFFER(ah); |
diff --git a/drivers/net/wireless/ath/ath9k/ar9002_hw.c b/drivers/net/wireless/ath/ath9k/ar9002_hw.c index 11f192a1ceb7..d190411ac8f5 100644 --- a/drivers/net/wireless/ath/ath9k/ar9002_hw.c +++ b/drivers/net/wireless/ath/ath9k/ar9002_hw.c | |||
@@ -180,6 +180,25 @@ static void ar9002_hw_init_mode_regs(struct ath_hw *ah) | |||
180 | INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, | 180 | INIT_INI_ARRAY(&ah->iniAddac, ar5416Addac, |
181 | ARRAY_SIZE(ar5416Addac), 2); | 181 | ARRAY_SIZE(ar5416Addac), 2); |
182 | } | 182 | } |
183 | |||
184 | /* iniAddac needs to be modified for these chips */ | ||
185 | if (AR_SREV_9160(ah) || !AR_SREV_5416_22_OR_LATER(ah)) { | ||
186 | struct ar5416IniArray *addac = &ah->iniAddac; | ||
187 | u32 size = sizeof(u32) * addac->ia_rows * addac->ia_columns; | ||
188 | u32 *data; | ||
189 | |||
190 | data = kmalloc(size, GFP_KERNEL); | ||
191 | if (!data) | ||
192 | return; | ||
193 | |||
194 | memcpy(data, addac->ia_array, size); | ||
195 | addac->ia_array = data; | ||
196 | |||
197 | if (!AR_SREV_5416_22_OR_LATER(ah)) { | ||
198 | /* override CLKDRV value */ | ||
199 | INI_RA(addac, 31,1) = 0; | ||
200 | } | ||
201 | } | ||
183 | } | 202 | } |
184 | 203 | ||
185 | /* Support for Japan ch.14 (2484) spread */ | 204 | /* Support for Japan ch.14 (2484) spread */ |
diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h index 6a29004a71b0..c8261d4fc780 100644 --- a/drivers/net/wireless/ath/ath9k/hw.h +++ b/drivers/net/wireless/ath/ath9k/hw.h | |||
@@ -940,7 +940,6 @@ struct ath_hw { | |||
940 | u32 *analogBank6Data; | 940 | u32 *analogBank6Data; |
941 | u32 *analogBank6TPCData; | 941 | u32 *analogBank6TPCData; |
942 | u32 *analogBank7Data; | 942 | u32 *analogBank7Data; |
943 | u32 *addac5416_21; | ||
944 | u32 *bank6Temp; | 943 | u32 *bank6Temp; |
945 | 944 | ||
946 | u8 txpower_limit; | 945 | u8 txpower_limit; |
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c index 90911eec0cf5..30b58870b1b6 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/ampdu.c | |||
@@ -1051,17 +1051,13 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb, | |||
1051 | } | 1051 | } |
1052 | /* either retransmit or send bar if ack not recd */ | 1052 | /* either retransmit or send bar if ack not recd */ |
1053 | if (!ack_recd) { | 1053 | if (!ack_recd) { |
1054 | struct ieee80211_tx_rate *txrate = | 1054 | if (retry && (ini->txretry[index] < (int)retry_limit)) { |
1055 | tx_info->status.rates; | ||
1056 | if (retry && (txrate[0].count < (int)retry_limit)) { | ||
1057 | ini->txretry[index]++; | 1055 | ini->txretry[index]++; |
1058 | ini->tx_in_transit--; | 1056 | ini->tx_in_transit--; |
1059 | /* | 1057 | /* |
1060 | * Use high prededence for retransmit to | 1058 | * Use high prededence for retransmit to |
1061 | * give some punch | 1059 | * give some punch |
1062 | */ | 1060 | */ |
1063 | /* brcms_c_txq_enq(wlc, scb, p, | ||
1064 | * BRCMS_PRIO_TO_PREC(tid)); */ | ||
1065 | brcms_c_txq_enq(wlc, scb, p, | 1061 | brcms_c_txq_enq(wlc, scb, p, |
1066 | BRCMS_PRIO_TO_HI_PREC(tid)); | 1062 | BRCMS_PRIO_TO_HI_PREC(tid)); |
1067 | } else { | 1063 | } else { |
@@ -1074,9 +1070,9 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb, | |||
1074 | IEEE80211_TX_STAT_AMPDU_NO_BACK; | 1070 | IEEE80211_TX_STAT_AMPDU_NO_BACK; |
1075 | skb_pull(p, D11_PHY_HDR_LEN); | 1071 | skb_pull(p, D11_PHY_HDR_LEN); |
1076 | skb_pull(p, D11_TXH_LEN); | 1072 | skb_pull(p, D11_TXH_LEN); |
1077 | wiphy_err(wiphy, "%s: BA Timeout, seq %d, in_" | 1073 | BCMMSG(wiphy, |
1078 | "transit %d\n", "AMPDU status", seq, | 1074 | "BA Timeout, seq %d, in_transit %d\n", |
1079 | ini->tx_in_transit); | 1075 | seq, ini->tx_in_transit); |
1080 | ieee80211_tx_status_irqsafe(wlc->pub->ieee_hw, | 1076 | ieee80211_tx_status_irqsafe(wlc->pub->ieee_hw, |
1081 | p); | 1077 | p); |
1082 | } | 1078 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c index 7353826095f1..e483cfa8d14e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c | |||
@@ -1187,6 +1187,7 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv, | |||
1187 | unsigned long flags; | 1187 | unsigned long flags; |
1188 | struct iwl_addsta_cmd sta_cmd; | 1188 | struct iwl_addsta_cmd sta_cmd; |
1189 | u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta); | 1189 | u8 sta_id = iwlagn_key_sta_id(priv, ctx->vif, sta); |
1190 | __le16 key_flags; | ||
1190 | 1191 | ||
1191 | /* if station isn't there, neither is the key */ | 1192 | /* if station isn't there, neither is the key */ |
1192 | if (sta_id == IWL_INVALID_STATION) | 1193 | if (sta_id == IWL_INVALID_STATION) |
@@ -1212,7 +1213,14 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv, | |||
1212 | IWL_ERR(priv, "offset %d not used in uCode key table.\n", | 1213 | IWL_ERR(priv, "offset %d not used in uCode key table.\n", |
1213 | keyconf->hw_key_idx); | 1214 | keyconf->hw_key_idx); |
1214 | 1215 | ||
1215 | sta_cmd.key.key_flags = STA_KEY_FLG_NO_ENC | STA_KEY_FLG_INVALID; | 1216 | key_flags = cpu_to_le16(keyconf->keyidx << STA_KEY_FLG_KEYID_POS); |
1217 | key_flags |= STA_KEY_FLG_MAP_KEY_MSK | STA_KEY_FLG_NO_ENC | | ||
1218 | STA_KEY_FLG_INVALID; | ||
1219 | |||
1220 | if (!(keyconf->flags & IEEE80211_KEY_FLAG_PAIRWISE)) | ||
1221 | key_flags |= STA_KEY_MULTICAST_MSK; | ||
1222 | |||
1223 | sta_cmd.key.key_flags = key_flags; | ||
1216 | sta_cmd.key.key_offset = WEP_INVALID_OFFSET; | 1224 | sta_cmd.key.key_offset = WEP_INVALID_OFFSET; |
1217 | sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK; | 1225 | sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK; |
1218 | sta_cmd.mode = STA_CONTROL_MODIFY_MSK; | 1226 | sta_cmd.mode = STA_CONTROL_MODIFY_MSK; |
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index c3e1aa7c1a80..d2a1ea98d0f2 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
@@ -1220,7 +1220,8 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev) | |||
1220 | cancel_work_sync(&rt2x00dev->rxdone_work); | 1220 | cancel_work_sync(&rt2x00dev->rxdone_work); |
1221 | cancel_work_sync(&rt2x00dev->txdone_work); | 1221 | cancel_work_sync(&rt2x00dev->txdone_work); |
1222 | } | 1222 | } |
1223 | destroy_workqueue(rt2x00dev->workqueue); | 1223 | if (rt2x00dev->workqueue) |
1224 | destroy_workqueue(rt2x00dev->workqueue); | ||
1224 | 1225 | ||
1225 | /* | 1226 | /* |
1226 | * Free the tx status fifo. | 1227 | * Free the tx status fifo. |
diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c index a6395bdb26ae..1ff94054d35a 100644 --- a/fs/binfmt_aout.c +++ b/fs/binfmt_aout.c | |||
@@ -259,6 +259,13 @@ static int load_aout_binary(struct linux_binprm * bprm, struct pt_regs * regs) | |||
259 | current->mm->free_area_cache = current->mm->mmap_base; | 259 | current->mm->free_area_cache = current->mm->mmap_base; |
260 | current->mm->cached_hole_size = 0; | 260 | current->mm->cached_hole_size = 0; |
261 | 261 | ||
262 | retval = setup_arg_pages(bprm, STACK_TOP, EXSTACK_DEFAULT); | ||
263 | if (retval < 0) { | ||
264 | /* Someone check-me: is this error path enough? */ | ||
265 | send_sig(SIGKILL, current, 0); | ||
266 | return retval; | ||
267 | } | ||
268 | |||
262 | install_exec_creds(bprm); | 269 | install_exec_creds(bprm); |
263 | current->flags &= ~PF_FORKNOEXEC; | 270 | current->flags &= ~PF_FORKNOEXEC; |
264 | 271 | ||
@@ -352,13 +359,6 @@ beyond_if: | |||
352 | return retval; | 359 | return retval; |
353 | } | 360 | } |
354 | 361 | ||
355 | retval = setup_arg_pages(bprm, STACK_TOP, EXSTACK_DEFAULT); | ||
356 | if (retval < 0) { | ||
357 | /* Someone check-me: is this error path enough? */ | ||
358 | send_sig(SIGKILL, current, 0); | ||
359 | return retval; | ||
360 | } | ||
361 | |||
362 | current->mm->start_stack = | 362 | current->mm->start_stack = |
363 | (unsigned long) create_aout_tables((char __user *) bprm->p, bprm); | 363 | (unsigned long) create_aout_tables((char __user *) bprm->p, bprm); |
364 | #ifdef __alpha__ | 364 | #ifdef __alpha__ |
diff --git a/include/linux/percpu.h b/include/linux/percpu.h index 32cd1f67462e..21638ae14e07 100644 --- a/include/linux/percpu.h +++ b/include/linux/percpu.h | |||
@@ -348,9 +348,9 @@ do { \ | |||
348 | #define _this_cpu_generic_to_op(pcp, val, op) \ | 348 | #define _this_cpu_generic_to_op(pcp, val, op) \ |
349 | do { \ | 349 | do { \ |
350 | unsigned long flags; \ | 350 | unsigned long flags; \ |
351 | local_irq_save(flags); \ | 351 | raw_local_irq_save(flags); \ |
352 | *__this_cpu_ptr(&(pcp)) op val; \ | 352 | *__this_cpu_ptr(&(pcp)) op val; \ |
353 | local_irq_restore(flags); \ | 353 | raw_local_irq_restore(flags); \ |
354 | } while (0) | 354 | } while (0) |
355 | 355 | ||
356 | #ifndef this_cpu_write | 356 | #ifndef this_cpu_write |
@@ -449,10 +449,10 @@ do { \ | |||
449 | ({ \ | 449 | ({ \ |
450 | typeof(pcp) ret__; \ | 450 | typeof(pcp) ret__; \ |
451 | unsigned long flags; \ | 451 | unsigned long flags; \ |
452 | local_irq_save(flags); \ | 452 | raw_local_irq_save(flags); \ |
453 | __this_cpu_add(pcp, val); \ | 453 | __this_cpu_add(pcp, val); \ |
454 | ret__ = __this_cpu_read(pcp); \ | 454 | ret__ = __this_cpu_read(pcp); \ |
455 | local_irq_restore(flags); \ | 455 | raw_local_irq_restore(flags); \ |
456 | ret__; \ | 456 | ret__; \ |
457 | }) | 457 | }) |
458 | 458 | ||
@@ -479,10 +479,10 @@ do { \ | |||
479 | #define _this_cpu_generic_xchg(pcp, nval) \ | 479 | #define _this_cpu_generic_xchg(pcp, nval) \ |
480 | ({ typeof(pcp) ret__; \ | 480 | ({ typeof(pcp) ret__; \ |
481 | unsigned long flags; \ | 481 | unsigned long flags; \ |
482 | local_irq_save(flags); \ | 482 | raw_local_irq_save(flags); \ |
483 | ret__ = __this_cpu_read(pcp); \ | 483 | ret__ = __this_cpu_read(pcp); \ |
484 | __this_cpu_write(pcp, nval); \ | 484 | __this_cpu_write(pcp, nval); \ |
485 | local_irq_restore(flags); \ | 485 | raw_local_irq_restore(flags); \ |
486 | ret__; \ | 486 | ret__; \ |
487 | }) | 487 | }) |
488 | 488 | ||
@@ -507,11 +507,11 @@ do { \ | |||
507 | ({ \ | 507 | ({ \ |
508 | typeof(pcp) ret__; \ | 508 | typeof(pcp) ret__; \ |
509 | unsigned long flags; \ | 509 | unsigned long flags; \ |
510 | local_irq_save(flags); \ | 510 | raw_local_irq_save(flags); \ |
511 | ret__ = __this_cpu_read(pcp); \ | 511 | ret__ = __this_cpu_read(pcp); \ |
512 | if (ret__ == (oval)) \ | 512 | if (ret__ == (oval)) \ |
513 | __this_cpu_write(pcp, nval); \ | 513 | __this_cpu_write(pcp, nval); \ |
514 | local_irq_restore(flags); \ | 514 | raw_local_irq_restore(flags); \ |
515 | ret__; \ | 515 | ret__; \ |
516 | }) | 516 | }) |
517 | 517 | ||
@@ -544,10 +544,10 @@ do { \ | |||
544 | ({ \ | 544 | ({ \ |
545 | int ret__; \ | 545 | int ret__; \ |
546 | unsigned long flags; \ | 546 | unsigned long flags; \ |
547 | local_irq_save(flags); \ | 547 | raw_local_irq_save(flags); \ |
548 | ret__ = __this_cpu_generic_cmpxchg_double(pcp1, pcp2, \ | 548 | ret__ = __this_cpu_generic_cmpxchg_double(pcp1, pcp2, \ |
549 | oval1, oval2, nval1, nval2); \ | 549 | oval1, oval2, nval1, nval2); \ |
550 | local_irq_restore(flags); \ | 550 | raw_local_irq_restore(flags); \ |
551 | ret__; \ | 551 | ret__; \ |
552 | }) | 552 | }) |
553 | 553 | ||
@@ -718,12 +718,13 @@ do { \ | |||
718 | # ifndef __this_cpu_add_return_8 | 718 | # ifndef __this_cpu_add_return_8 |
719 | # define __this_cpu_add_return_8(pcp, val) __this_cpu_generic_add_return(pcp, val) | 719 | # define __this_cpu_add_return_8(pcp, val) __this_cpu_generic_add_return(pcp, val) |
720 | # endif | 720 | # endif |
721 | # define __this_cpu_add_return(pcp, val) __pcpu_size_call_return2(this_cpu_add_return_, pcp, val) | 721 | # define __this_cpu_add_return(pcp, val) \ |
722 | __pcpu_size_call_return2(__this_cpu_add_return_, pcp, val) | ||
722 | #endif | 723 | #endif |
723 | 724 | ||
724 | #define __this_cpu_sub_return(pcp, val) this_cpu_add_return(pcp, -(val)) | 725 | #define __this_cpu_sub_return(pcp, val) __this_cpu_add_return(pcp, -(val)) |
725 | #define __this_cpu_inc_return(pcp) this_cpu_add_return(pcp, 1) | 726 | #define __this_cpu_inc_return(pcp) __this_cpu_add_return(pcp, 1) |
726 | #define __this_cpu_dec_return(pcp) this_cpu_add_return(pcp, -1) | 727 | #define __this_cpu_dec_return(pcp) __this_cpu_add_return(pcp, -1) |
727 | 728 | ||
728 | #define __this_cpu_generic_xchg(pcp, nval) \ | 729 | #define __this_cpu_generic_xchg(pcp, nval) \ |
729 | ({ typeof(pcp) ret__; \ | 730 | ({ typeof(pcp) ret__; \ |
diff --git a/include/linux/tcp.h b/include/linux/tcp.h index 46a85c9e1f25..3c7ffdb40dc6 100644 --- a/include/linux/tcp.h +++ b/include/linux/tcp.h | |||
@@ -412,7 +412,8 @@ struct tcp_sock { | |||
412 | 412 | ||
413 | struct tcp_sack_block recv_sack_cache[4]; | 413 | struct tcp_sack_block recv_sack_cache[4]; |
414 | 414 | ||
415 | struct sk_buff *highest_sack; /* highest skb with SACK received | 415 | struct sk_buff *highest_sack; /* skb just after the highest |
416 | * skb with SACKed bit set | ||
416 | * (validity guaranteed only if | 417 | * (validity guaranteed only if |
417 | * sacked_out > 0) | 418 | * sacked_out > 0) |
418 | */ | 419 | */ |
diff --git a/include/net/tcp.h b/include/net/tcp.h index 42c29bfbcee3..2d80c291fffb 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -1364,8 +1364,9 @@ static inline void tcp_push_pending_frames(struct sock *sk) | |||
1364 | } | 1364 | } |
1365 | } | 1365 | } |
1366 | 1366 | ||
1367 | /* Start sequence of the highest skb with SACKed bit, valid only if | 1367 | /* Start sequence of the skb just after the highest skb with SACKed |
1368 | * sacked > 0 or when the caller has ensured validity by itself. | 1368 | * bit, valid only if sacked_out > 0 or when the caller has ensured |
1369 | * validity by itself. | ||
1369 | */ | 1370 | */ |
1370 | static inline u32 tcp_highest_sack_seq(struct tcp_sock *tp) | 1371 | static inline u32 tcp_highest_sack_seq(struct tcp_sock *tp) |
1371 | { | 1372 | { |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 5f34bd8dda34..a876871f6be5 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
@@ -2277,8 +2277,8 @@ void __unmap_hugepage_range(struct vm_area_struct *vma, unsigned long start, | |||
2277 | set_page_dirty(page); | 2277 | set_page_dirty(page); |
2278 | list_add(&page->lru, &page_list); | 2278 | list_add(&page->lru, &page_list); |
2279 | } | 2279 | } |
2280 | spin_unlock(&mm->page_table_lock); | ||
2281 | flush_tlb_range(vma, start, end); | 2280 | flush_tlb_range(vma, start, end); |
2281 | spin_unlock(&mm->page_table_lock); | ||
2282 | mmu_notifier_invalidate_range_end(mm, start, end); | 2282 | mmu_notifier_invalidate_range_end(mm, start, end); |
2283 | list_for_each_entry_safe(page, tmp, &page_list, lru) { | 2283 | list_for_each_entry_safe(page, tmp, &page_list, lru) { |
2284 | page_remove_rmap(page); | 2284 | page_remove_rmap(page); |
@@ -1293,6 +1293,8 @@ munmap_back: | |||
1293 | pgoff = vma->vm_pgoff; | 1293 | pgoff = vma->vm_pgoff; |
1294 | vm_flags = vma->vm_flags; | 1294 | vm_flags = vma->vm_flags; |
1295 | } else if (vm_flags & VM_SHARED) { | 1295 | } else if (vm_flags & VM_SHARED) { |
1296 | if (unlikely(vm_flags & (VM_GROWSDOWN|VM_GROWSUP))) | ||
1297 | goto free_vma; | ||
1296 | error = shmem_zero_setup(vma); | 1298 | error = shmem_zero_setup(vma); |
1297 | if (error) | 1299 | if (error) |
1298 | goto free_vma; | 1300 | goto free_vma; |
diff --git a/mm/percpu-vm.c b/mm/percpu-vm.c index 12a48a88c0d8..405d331804c3 100644 --- a/mm/percpu-vm.c +++ b/mm/percpu-vm.c | |||
@@ -184,8 +184,7 @@ static void pcpu_unmap_pages(struct pcpu_chunk *chunk, | |||
184 | page_end - page_start); | 184 | page_end - page_start); |
185 | } | 185 | } |
186 | 186 | ||
187 | for (i = page_start; i < page_end; i++) | 187 | bitmap_clear(populated, page_start, page_end - page_start); |
188 | __clear_bit(i, populated); | ||
189 | } | 188 | } |
190 | 189 | ||
191 | /** | 190 | /** |
diff --git a/net/bridge/br_multicast.c b/net/bridge/br_multicast.c index 568d5bf17534..702a1ae9220b 100644 --- a/net/bridge/br_multicast.c +++ b/net/bridge/br_multicast.c | |||
@@ -446,8 +446,11 @@ static struct sk_buff *br_ip6_multicast_alloc_query(struct net_bridge *br, | |||
446 | ip6h->nexthdr = IPPROTO_HOPOPTS; | 446 | ip6h->nexthdr = IPPROTO_HOPOPTS; |
447 | ip6h->hop_limit = 1; | 447 | ip6h->hop_limit = 1; |
448 | ipv6_addr_set(&ip6h->daddr, htonl(0xff020000), 0, 0, htonl(1)); | 448 | ipv6_addr_set(&ip6h->daddr, htonl(0xff020000), 0, 0, htonl(1)); |
449 | ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0, | 449 | if (ipv6_dev_get_saddr(dev_net(br->dev), br->dev, &ip6h->daddr, 0, |
450 | &ip6h->saddr); | 450 | &ip6h->saddr)) { |
451 | kfree_skb(skb); | ||
452 | return NULL; | ||
453 | } | ||
451 | ipv6_eth_mc_map(&ip6h->daddr, eth->h_dest); | 454 | ipv6_eth_mc_map(&ip6h->daddr, eth->h_dest); |
452 | 455 | ||
453 | hopopt = (u8 *)(ip6h + 1); | 456 | hopopt = (u8 *)(ip6h + 1); |
diff --git a/net/bridge/br_stp.c b/net/bridge/br_stp.c index dd147d78a588..6751ed4e0c07 100644 --- a/net/bridge/br_stp.c +++ b/net/bridge/br_stp.c | |||
@@ -17,9 +17,9 @@ | |||
17 | #include "br_private_stp.h" | 17 | #include "br_private_stp.h" |
18 | 18 | ||
19 | /* since time values in bpdu are in jiffies and then scaled (1/256) | 19 | /* since time values in bpdu are in jiffies and then scaled (1/256) |
20 | * before sending, make sure that is at least one. | 20 | * before sending, make sure that is at least one STP tick. |
21 | */ | 21 | */ |
22 | #define MESSAGE_AGE_INCR ((HZ < 256) ? 1 : (HZ/256)) | 22 | #define MESSAGE_AGE_INCR ((HZ / 256) + 1) |
23 | 23 | ||
24 | static const char *const br_port_state_names[] = { | 24 | static const char *const br_port_state_names[] = { |
25 | [BR_STATE_DISABLED] = "disabled", | 25 | [BR_STATE_DISABLED] = "disabled", |
@@ -186,7 +186,7 @@ static void br_record_config_information(struct net_bridge_port *p, | |||
186 | p->designated_cost = bpdu->root_path_cost; | 186 | p->designated_cost = bpdu->root_path_cost; |
187 | p->designated_bridge = bpdu->bridge_id; | 187 | p->designated_bridge = bpdu->bridge_id; |
188 | p->designated_port = bpdu->port_id; | 188 | p->designated_port = bpdu->port_id; |
189 | p->designated_age = jiffies + bpdu->message_age; | 189 | p->designated_age = jiffies - bpdu->message_age; |
190 | 190 | ||
191 | mod_timer(&p->message_age_timer, jiffies | 191 | mod_timer(&p->message_age_timer, jiffies |
192 | + (p->br->max_age - bpdu->message_age)); | 192 | + (p->br->max_age - bpdu->message_age)); |
diff --git a/net/bridge/netfilter/ebtables.c b/net/bridge/netfilter/ebtables.c index 5864cc491369..8aa4ad0e06af 100644 --- a/net/bridge/netfilter/ebtables.c +++ b/net/bridge/netfilter/ebtables.c | |||
@@ -1893,10 +1893,7 @@ static int compat_mtw_from_user(struct compat_ebt_entry_mwt *mwt, | |||
1893 | 1893 | ||
1894 | switch (compat_mwt) { | 1894 | switch (compat_mwt) { |
1895 | case EBT_COMPAT_MATCH: | 1895 | case EBT_COMPAT_MATCH: |
1896 | match = try_then_request_module(xt_find_match(NFPROTO_BRIDGE, | 1896 | match = xt_request_find_match(NFPROTO_BRIDGE, name, 0); |
1897 | name, 0), "ebt_%s", name); | ||
1898 | if (match == NULL) | ||
1899 | return -ENOENT; | ||
1900 | if (IS_ERR(match)) | 1897 | if (IS_ERR(match)) |
1901 | return PTR_ERR(match); | 1898 | return PTR_ERR(match); |
1902 | 1899 | ||
@@ -1915,10 +1912,7 @@ static int compat_mtw_from_user(struct compat_ebt_entry_mwt *mwt, | |||
1915 | break; | 1912 | break; |
1916 | case EBT_COMPAT_WATCHER: /* fallthrough */ | 1913 | case EBT_COMPAT_WATCHER: /* fallthrough */ |
1917 | case EBT_COMPAT_TARGET: | 1914 | case EBT_COMPAT_TARGET: |
1918 | wt = try_then_request_module(xt_find_target(NFPROTO_BRIDGE, | 1915 | wt = xt_request_find_target(NFPROTO_BRIDGE, name, 0); |
1919 | name, 0), "ebt_%s", name); | ||
1920 | if (wt == NULL) | ||
1921 | return -ENOENT; | ||
1922 | if (IS_ERR(wt)) | 1916 | if (IS_ERR(wt)) |
1923 | return PTR_ERR(wt); | 1917 | return PTR_ERR(wt); |
1924 | off = xt_compat_target_offset(wt); | 1918 | off = xt_compat_target_offset(wt); |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index 606a6e8f3671..f965dce6f20f 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -1060,11 +1060,12 @@ static int rtnl_dump_ifinfo(struct sk_buff *skb, struct netlink_callback *cb) | |||
1060 | rcu_read_lock(); | 1060 | rcu_read_lock(); |
1061 | cb->seq = net->dev_base_seq; | 1061 | cb->seq = net->dev_base_seq; |
1062 | 1062 | ||
1063 | nlmsg_parse(cb->nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, | 1063 | if (nlmsg_parse(cb->nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, |
1064 | ifla_policy); | 1064 | ifla_policy) >= 0) { |
1065 | 1065 | ||
1066 | if (tb[IFLA_EXT_MASK]) | 1066 | if (tb[IFLA_EXT_MASK]) |
1067 | ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); | 1067 | ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); |
1068 | } | ||
1068 | 1069 | ||
1069 | for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) { | 1070 | for (h = s_h; h < NETDEV_HASHENTRIES; h++, s_idx = 0) { |
1070 | idx = 0; | 1071 | idx = 0; |
@@ -1900,10 +1901,11 @@ static u16 rtnl_calcit(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
1900 | u32 ext_filter_mask = 0; | 1901 | u32 ext_filter_mask = 0; |
1901 | u16 min_ifinfo_dump_size = 0; | 1902 | u16 min_ifinfo_dump_size = 0; |
1902 | 1903 | ||
1903 | nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, ifla_policy); | 1904 | if (nlmsg_parse(nlh, sizeof(struct rtgenmsg), tb, IFLA_MAX, |
1904 | 1905 | ifla_policy) >= 0) { | |
1905 | if (tb[IFLA_EXT_MASK]) | 1906 | if (tb[IFLA_EXT_MASK]) |
1906 | ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); | 1907 | ext_filter_mask = nla_get_u32(tb[IFLA_EXT_MASK]); |
1908 | } | ||
1907 | 1909 | ||
1908 | if (!ext_filter_mask) | 1910 | if (!ext_filter_mask) |
1909 | return NLMSG_GOODSIZE; | 1911 | return NLMSG_GOODSIZE; |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index 53c8ce4046b2..d9b83d198c3d 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -1403,8 +1403,16 @@ static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb, | |||
1403 | 1403 | ||
1404 | BUG_ON(!pcount); | 1404 | BUG_ON(!pcount); |
1405 | 1405 | ||
1406 | /* Adjust hint for FACK. Non-FACK is handled in tcp_sacktag_one(). */ | 1406 | /* Adjust counters and hints for the newly sacked sequence |
1407 | if (tcp_is_fack(tp) && (skb == tp->lost_skb_hint)) | 1407 | * range but discard the return value since prev is already |
1408 | * marked. We must tag the range first because the seq | ||
1409 | * advancement below implicitly advances | ||
1410 | * tcp_highest_sack_seq() when skb is highest_sack. | ||
1411 | */ | ||
1412 | tcp_sacktag_one(sk, state, TCP_SKB_CB(skb)->sacked, | ||
1413 | start_seq, end_seq, dup_sack, pcount); | ||
1414 | |||
1415 | if (skb == tp->lost_skb_hint) | ||
1408 | tp->lost_cnt_hint += pcount; | 1416 | tp->lost_cnt_hint += pcount; |
1409 | 1417 | ||
1410 | TCP_SKB_CB(prev)->end_seq += shifted; | 1418 | TCP_SKB_CB(prev)->end_seq += shifted; |
@@ -1430,12 +1438,6 @@ static int tcp_shifted_skb(struct sock *sk, struct sk_buff *skb, | |||
1430 | skb_shinfo(skb)->gso_type = 0; | 1438 | skb_shinfo(skb)->gso_type = 0; |
1431 | } | 1439 | } |
1432 | 1440 | ||
1433 | /* Adjust counters and hints for the newly sacked sequence range but | ||
1434 | * discard the return value since prev is already marked. | ||
1435 | */ | ||
1436 | tcp_sacktag_one(sk, state, TCP_SKB_CB(skb)->sacked, | ||
1437 | start_seq, end_seq, dup_sack, pcount); | ||
1438 | |||
1439 | /* Difference in this won't matter, both ACKed by the same cumul. ACK */ | 1441 | /* Difference in this won't matter, both ACKed by the same cumul. ACK */ |
1440 | TCP_SKB_CB(prev)->sacked |= (TCP_SKB_CB(skb)->sacked & TCPCB_EVER_RETRANS); | 1442 | TCP_SKB_CB(prev)->sacked |= (TCP_SKB_CB(skb)->sacked & TCPCB_EVER_RETRANS); |
1441 | 1443 | ||
@@ -2567,6 +2569,7 @@ static void tcp_mark_head_lost(struct sock *sk, int packets, int mark_head) | |||
2567 | 2569 | ||
2568 | if (cnt > packets) { | 2570 | if (cnt > packets) { |
2569 | if ((tcp_is_sack(tp) && !tcp_is_fack(tp)) || | 2571 | if ((tcp_is_sack(tp) && !tcp_is_fack(tp)) || |
2572 | (TCP_SKB_CB(skb)->sacked & TCPCB_SACKED_ACKED) || | ||
2570 | (oldcnt >= packets)) | 2573 | (oldcnt >= packets)) |
2571 | break; | 2574 | break; |
2572 | 2575 | ||
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index 01a21c2f6ab3..8e2137bd87e2 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c | |||
@@ -1332,6 +1332,9 @@ u32 __ieee80211_recalc_idle(struct ieee80211_local *local) | |||
1332 | hw_roc = true; | 1332 | hw_roc = true; |
1333 | 1333 | ||
1334 | list_for_each_entry(sdata, &local->interfaces, list) { | 1334 | list_for_each_entry(sdata, &local->interfaces, list) { |
1335 | if (sdata->vif.type == NL80211_IFTYPE_MONITOR || | ||
1336 | sdata->vif.type == NL80211_IFTYPE_AP_VLAN) | ||
1337 | continue; | ||
1335 | if (sdata->old_idle == sdata->vif.bss_conf.idle) | 1338 | if (sdata->old_idle == sdata->vif.bss_conf.idle) |
1336 | continue; | 1339 | continue; |
1337 | if (!ieee80211_sdata_running(sdata)) | 1340 | if (!ieee80211_sdata_running(sdata)) |
diff --git a/net/mac80211/rate.c b/net/mac80211/rate.c index ad64f4d5271a..f9b8e819ca63 100644 --- a/net/mac80211/rate.c +++ b/net/mac80211/rate.c | |||
@@ -344,7 +344,7 @@ void rate_control_get_rate(struct ieee80211_sub_if_data *sdata, | |||
344 | for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { | 344 | for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { |
345 | info->control.rates[i].idx = -1; | 345 | info->control.rates[i].idx = -1; |
346 | info->control.rates[i].flags = 0; | 346 | info->control.rates[i].flags = 0; |
347 | info->control.rates[i].count = 1; | 347 | info->control.rates[i].count = 0; |
348 | } | 348 | } |
349 | 349 | ||
350 | if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) | 350 | if (sdata->local->hw.flags & IEEE80211_HW_HAS_RATE_CONTROL) |