Contents of /trunk/kernel-lts/patches-3.4/0131-3.4.32-all-fixes.patch
Parent Directory | Revision Log
Revision 2085 -
(show annotations)
(download)
Wed Feb 20 10:54:54 2013 UTC (11 years, 7 months ago) by niro
File size: 6287 byte(s)
Wed Feb 20 10:54:54 2013 UTC (11 years, 7 months ago) by niro
File size: 6287 byte(s)
-linux-3.4.32
1 | diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c |
2 | index c5531db..747ab28 100644 |
3 | --- a/arch/s390/kernel/time.c |
4 | +++ b/arch/s390/kernel/time.c |
5 | @@ -121,6 +121,9 @@ static int s390_next_ktime(ktime_t expires, |
6 | nsecs = ktime_to_ns(ktime_add(timespec_to_ktime(ts), expires)); |
7 | do_div(nsecs, 125); |
8 | S390_lowcore.clock_comparator = sched_clock_base_cc + (nsecs << 9); |
9 | + /* Program the maximum value if we have an overflow (== year 2042) */ |
10 | + if (unlikely(S390_lowcore.clock_comparator < sched_clock_base_cc)) |
11 | + S390_lowcore.clock_comparator = -1ULL; |
12 | set_clock_comparator(S390_lowcore.clock_comparator); |
13 | return 0; |
14 | } |
15 | diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h |
16 | index c3520d7..3f3dd52 100644 |
17 | --- a/arch/x86/include/asm/pgtable.h |
18 | +++ b/arch/x86/include/asm/pgtable.h |
19 | @@ -142,6 +142,11 @@ static inline unsigned long pmd_pfn(pmd_t pmd) |
20 | return (pmd_val(pmd) & PTE_PFN_MASK) >> PAGE_SHIFT; |
21 | } |
22 | |
23 | +static inline unsigned long pud_pfn(pud_t pud) |
24 | +{ |
25 | + return (pud_val(pud) & PTE_PFN_MASK) >> PAGE_SHIFT; |
26 | +} |
27 | + |
28 | #define pte_page(pte) pfn_to_page(pte_pfn(pte)) |
29 | |
30 | static inline int pmd_large(pmd_t pte) |
31 | diff --git a/arch/x86/kernel/apic/x2apic_phys.c b/arch/x86/kernel/apic/x2apic_phys.c |
32 | index 991e315..db31a2c 100644 |
33 | --- a/arch/x86/kernel/apic/x2apic_phys.c |
34 | +++ b/arch/x86/kernel/apic/x2apic_phys.c |
35 | @@ -20,18 +20,19 @@ static int set_x2apic_phys_mode(char *arg) |
36 | } |
37 | early_param("x2apic_phys", set_x2apic_phys_mode); |
38 | |
39 | -static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id) |
40 | +static bool x2apic_fadt_phys(void) |
41 | { |
42 | - if (x2apic_phys) |
43 | - return x2apic_enabled(); |
44 | - else if ((acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID) && |
45 | - (acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL) && |
46 | - x2apic_enabled()) { |
47 | + if ((acpi_gbl_FADT.header.revision >= FADT2_REVISION_ID) && |
48 | + (acpi_gbl_FADT.flags & ACPI_FADT_APIC_PHYSICAL)) { |
49 | printk(KERN_DEBUG "System requires x2apic physical mode\n"); |
50 | - return 1; |
51 | + return true; |
52 | } |
53 | - else |
54 | - return 0; |
55 | + return false; |
56 | +} |
57 | + |
58 | +static int x2apic_acpi_madt_oem_check(char *oem_id, char *oem_table_id) |
59 | +{ |
60 | + return x2apic_enabled() && (x2apic_phys || x2apic_fadt_phys()); |
61 | } |
62 | |
63 | static void |
64 | @@ -114,7 +115,7 @@ static void init_x2apic_ldr(void) |
65 | |
66 | static int x2apic_phys_probe(void) |
67 | { |
68 | - if (x2apic_mode && x2apic_phys) |
69 | + if (x2apic_mode && (x2apic_phys || x2apic_fadt_phys())) |
70 | return 1; |
71 | |
72 | return apic == &apic_x2apic_phys; |
73 | diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c |
74 | index 3ecfd1a..e922e01 100644 |
75 | --- a/arch/x86/mm/fault.c |
76 | +++ b/arch/x86/mm/fault.c |
77 | @@ -747,13 +747,15 @@ __bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code, |
78 | return; |
79 | } |
80 | #endif |
81 | + /* Kernel addresses are always protection faults: */ |
82 | + if (address >= TASK_SIZE) |
83 | + error_code |= PF_PROT; |
84 | |
85 | - if (unlikely(show_unhandled_signals)) |
86 | + if (likely(show_unhandled_signals)) |
87 | show_signal_msg(regs, error_code, address, tsk); |
88 | |
89 | - /* Kernel addresses are always protection faults: */ |
90 | tsk->thread.cr2 = address; |
91 | - tsk->thread.error_code = error_code | (address >= TASK_SIZE); |
92 | + tsk->thread.error_code = error_code; |
93 | tsk->thread.trap_nr = X86_TRAP_PF; |
94 | |
95 | force_sig_info_fault(SIGSEGV, si_code, address, tsk, 0); |
96 | diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c |
97 | index fc18be0..faf7a68 100644 |
98 | --- a/arch/x86/mm/init_64.c |
99 | +++ b/arch/x86/mm/init_64.c |
100 | @@ -821,6 +821,9 @@ int kern_addr_valid(unsigned long addr) |
101 | if (pud_none(*pud)) |
102 | return 0; |
103 | |
104 | + if (pud_large(*pud)) |
105 | + return pfn_valid(pud_pfn(*pud)); |
106 | + |
107 | pmd = pmd_offset(pud, addr); |
108 | if (pmd_none(*pmd)) |
109 | return 0; |
110 | diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c |
111 | index 6fcd4ad..3705bb0 100644 |
112 | --- a/arch/x86/platform/efi/efi.c |
113 | +++ b/arch/x86/platform/efi/efi.c |
114 | @@ -86,7 +86,7 @@ EXPORT_SYMBOL(efi_enabled); |
115 | |
116 | static int __init setup_noefi(char *arg) |
117 | { |
118 | - clear_bit(EFI_BOOT, &x86_efi_facility); |
119 | + clear_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility); |
120 | return 0; |
121 | } |
122 | early_param("noefi", setup_noefi); |
123 | diff --git a/arch/x86/xen/xen-asm_32.S b/arch/x86/xen/xen-asm_32.S |
124 | index b040b0e..7328f71 100644 |
125 | --- a/arch/x86/xen/xen-asm_32.S |
126 | +++ b/arch/x86/xen/xen-asm_32.S |
127 | @@ -88,11 +88,11 @@ ENTRY(xen_iret) |
128 | */ |
129 | #ifdef CONFIG_SMP |
130 | GET_THREAD_INFO(%eax) |
131 | - movl TI_cpu(%eax), %eax |
132 | - movl __per_cpu_offset(,%eax,4), %eax |
133 | - mov xen_vcpu(%eax), %eax |
134 | + movl %ss:TI_cpu(%eax), %eax |
135 | + movl %ss:__per_cpu_offset(,%eax,4), %eax |
136 | + mov %ss:xen_vcpu(%eax), %eax |
137 | #else |
138 | - movl xen_vcpu, %eax |
139 | + movl %ss:xen_vcpu, %eax |
140 | #endif |
141 | |
142 | /* check IF state we're restoring */ |
143 | @@ -105,11 +105,11 @@ ENTRY(xen_iret) |
144 | * resuming the code, so we don't have to be worried about |
145 | * being preempted to another CPU. |
146 | */ |
147 | - setz XEN_vcpu_info_mask(%eax) |
148 | + setz %ss:XEN_vcpu_info_mask(%eax) |
149 | xen_iret_start_crit: |
150 | |
151 | /* check for unmasked and pending */ |
152 | - cmpw $0x0001, XEN_vcpu_info_pending(%eax) |
153 | + cmpw $0x0001, %ss:XEN_vcpu_info_pending(%eax) |
154 | |
155 | /* |
156 | * If there's something pending, mask events again so we can |
157 | @@ -117,7 +117,7 @@ xen_iret_start_crit: |
158 | * touch XEN_vcpu_info_mask. |
159 | */ |
160 | jne 1f |
161 | - movb $1, XEN_vcpu_info_mask(%eax) |
162 | + movb $1, %ss:XEN_vcpu_info_mask(%eax) |
163 | |
164 | 1: popl %eax |
165 | |
166 | diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c |
167 | index 6b4f014..1fb180d 100644 |
168 | --- a/drivers/net/ethernet/intel/igb/igb_main.c |
169 | +++ b/drivers/net/ethernet/intel/igb/igb_main.c |
170 | @@ -4649,11 +4649,13 @@ void igb_update_stats(struct igb_adapter *adapter, |
171 | bytes = 0; |
172 | packets = 0; |
173 | for (i = 0; i < adapter->num_rx_queues; i++) { |
174 | - u32 rqdpc_tmp = rd32(E1000_RQDPC(i)) & 0x0FFF; |
175 | + u32 rqdpc = rd32(E1000_RQDPC(i)); |
176 | struct igb_ring *ring = adapter->rx_ring[i]; |
177 | |
178 | - ring->rx_stats.drops += rqdpc_tmp; |
179 | - net_stats->rx_fifo_errors += rqdpc_tmp; |
180 | + if (rqdpc) { |
181 | + ring->rx_stats.drops += rqdpc; |
182 | + net_stats->rx_fifo_errors += rqdpc; |
183 | + } |
184 | |
185 | do { |
186 | start = u64_stats_fetch_begin_bh(&ring->rx_syncp); |
187 | diff --git a/drivers/pci/remove.c b/drivers/pci/remove.c |
188 | index fd77e2b..eae55c7 100644 |
189 | --- a/drivers/pci/remove.c |
190 | +++ b/drivers/pci/remove.c |
191 | @@ -19,6 +19,8 @@ static void pci_free_resources(struct pci_dev *dev) |
192 | |
193 | static void pci_stop_dev(struct pci_dev *dev) |
194 | { |
195 | + pci_pme_active(dev, false); |
196 | + |
197 | if (dev->is_added) { |
198 | pci_proc_detach_device(dev); |
199 | pci_remove_sysfs_dev_files(dev); |