Contents of /trunk/kernel-alx/patches-4.1/0100-4.1.1-all-fixes.patch
Parent Directory | Revision Log
Revision 2748 -
(show annotations)
(download)
Mon Jan 11 12:00:45 2016 UTC (8 years, 8 months ago) by niro
File size: 13952 byte(s)
Mon Jan 11 12:00:45 2016 UTC (8 years, 8 months ago) by niro
File size: 13952 byte(s)
-linux-4.1 patches up to 4.1.15
1 | diff --git a/Makefile b/Makefile |
2 | index f5c8983aeeb7..1caf4ad3eb8a 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,8 +1,8 @@ |
6 | VERSION = 4 |
7 | PATCHLEVEL = 1 |
8 | -SUBLEVEL = 0 |
9 | +SUBLEVEL = 1 |
10 | EXTRAVERSION = |
11 | -NAME = Hurr durr I'ma sheep |
12 | +NAME = Series 4800 |
13 | |
14 | # *DOCUMENTATION* |
15 | # To see a list of typical targets execute "make help" |
16 | diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c |
17 | index 4f7001f28936..aa4e3a74e541 100644 |
18 | --- a/arch/x86/kernel/cpu/perf_event.c |
19 | +++ b/arch/x86/kernel/cpu/perf_event.c |
20 | @@ -270,11 +270,7 @@ msr_fail: |
21 | |
22 | static void hw_perf_event_destroy(struct perf_event *event) |
23 | { |
24 | - if (atomic_dec_and_mutex_lock(&active_events, &pmc_reserve_mutex)) { |
25 | - release_pmc_hardware(); |
26 | - release_ds_buffers(); |
27 | - mutex_unlock(&pmc_reserve_mutex); |
28 | - } |
29 | + x86_release_hardware(); |
30 | } |
31 | |
32 | void hw_perf_lbr_event_destroy(struct perf_event *event) |
33 | @@ -324,6 +320,35 @@ set_ext_hw_attr(struct hw_perf_event *hwc, struct perf_event *event) |
34 | return x86_pmu_extra_regs(val, event); |
35 | } |
36 | |
37 | +int x86_reserve_hardware(void) |
38 | +{ |
39 | + int err = 0; |
40 | + |
41 | + if (!atomic_inc_not_zero(&active_events)) { |
42 | + mutex_lock(&pmc_reserve_mutex); |
43 | + if (atomic_read(&active_events) == 0) { |
44 | + if (!reserve_pmc_hardware()) |
45 | + err = -EBUSY; |
46 | + else |
47 | + reserve_ds_buffers(); |
48 | + } |
49 | + if (!err) |
50 | + atomic_inc(&active_events); |
51 | + mutex_unlock(&pmc_reserve_mutex); |
52 | + } |
53 | + |
54 | + return err; |
55 | +} |
56 | + |
57 | +void x86_release_hardware(void) |
58 | +{ |
59 | + if (atomic_dec_and_mutex_lock(&active_events, &pmc_reserve_mutex)) { |
60 | + release_pmc_hardware(); |
61 | + release_ds_buffers(); |
62 | + mutex_unlock(&pmc_reserve_mutex); |
63 | + } |
64 | +} |
65 | + |
66 | /* |
67 | * Check if we can create event of a certain type (that no conflicting events |
68 | * are present). |
69 | @@ -336,9 +361,10 @@ int x86_add_exclusive(unsigned int what) |
70 | return 0; |
71 | |
72 | mutex_lock(&pmc_reserve_mutex); |
73 | - for (i = 0; i < ARRAY_SIZE(x86_pmu.lbr_exclusive); i++) |
74 | + for (i = 0; i < ARRAY_SIZE(x86_pmu.lbr_exclusive); i++) { |
75 | if (i != what && atomic_read(&x86_pmu.lbr_exclusive[i])) |
76 | goto out; |
77 | + } |
78 | |
79 | atomic_inc(&x86_pmu.lbr_exclusive[what]); |
80 | ret = 0; |
81 | @@ -527,19 +553,7 @@ static int __x86_pmu_event_init(struct perf_event *event) |
82 | if (!x86_pmu_initialized()) |
83 | return -ENODEV; |
84 | |
85 | - err = 0; |
86 | - if (!atomic_inc_not_zero(&active_events)) { |
87 | - mutex_lock(&pmc_reserve_mutex); |
88 | - if (atomic_read(&active_events) == 0) { |
89 | - if (!reserve_pmc_hardware()) |
90 | - err = -EBUSY; |
91 | - else |
92 | - reserve_ds_buffers(); |
93 | - } |
94 | - if (!err) |
95 | - atomic_inc(&active_events); |
96 | - mutex_unlock(&pmc_reserve_mutex); |
97 | - } |
98 | + err = x86_reserve_hardware(); |
99 | if (err) |
100 | return err; |
101 | |
102 | diff --git a/arch/x86/kernel/cpu/perf_event.h b/arch/x86/kernel/cpu/perf_event.h |
103 | index ef78516850fb..f068695eaca0 100644 |
104 | --- a/arch/x86/kernel/cpu/perf_event.h |
105 | +++ b/arch/x86/kernel/cpu/perf_event.h |
106 | @@ -703,6 +703,10 @@ int x86_add_exclusive(unsigned int what); |
107 | |
108 | void x86_del_exclusive(unsigned int what); |
109 | |
110 | +int x86_reserve_hardware(void); |
111 | + |
112 | +void x86_release_hardware(void); |
113 | + |
114 | void hw_perf_lbr_event_destroy(struct perf_event *event); |
115 | |
116 | int x86_setup_perfctr(struct perf_event *event); |
117 | diff --git a/arch/x86/kernel/cpu/perf_event_intel.c b/arch/x86/kernel/cpu/perf_event_intel.c |
118 | index a1e35c9f06b9..2813ea0f142e 100644 |
119 | --- a/arch/x86/kernel/cpu/perf_event_intel.c |
120 | +++ b/arch/x86/kernel/cpu/perf_event_intel.c |
121 | @@ -3253,6 +3253,8 @@ __init int intel_pmu_init(void) |
122 | |
123 | case 61: /* 14nm Broadwell Core-M */ |
124 | case 86: /* 14nm Broadwell Xeon D */ |
125 | + case 71: /* 14nm Broadwell + GT3e (Intel Iris Pro graphics) */ |
126 | + case 79: /* 14nm Broadwell Server */ |
127 | x86_pmu.late_ack = true; |
128 | memcpy(hw_cache_event_ids, hsw_hw_cache_event_ids, sizeof(hw_cache_event_ids)); |
129 | memcpy(hw_cache_extra_regs, hsw_hw_cache_extra_regs, sizeof(hw_cache_extra_regs)); |
130 | @@ -3322,13 +3324,13 @@ __init int intel_pmu_init(void) |
131 | * counter, so do not extend mask to generic counters |
132 | */ |
133 | for_each_event_constraint(c, x86_pmu.event_constraints) { |
134 | - if (c->cmask != FIXED_EVENT_FLAGS |
135 | - || c->idxmsk64 == INTEL_PMC_MSK_FIXED_REF_CYCLES) { |
136 | - continue; |
137 | + if (c->cmask == FIXED_EVENT_FLAGS |
138 | + && c->idxmsk64 != INTEL_PMC_MSK_FIXED_REF_CYCLES) { |
139 | + c->idxmsk64 |= (1ULL << x86_pmu.num_counters) - 1; |
140 | } |
141 | - |
142 | - c->idxmsk64 |= (1ULL << x86_pmu.num_counters) - 1; |
143 | - c->weight += x86_pmu.num_counters; |
144 | + c->idxmsk64 &= |
145 | + ~(~0UL << (INTEL_PMC_IDX_FIXED + x86_pmu.num_counters_fixed)); |
146 | + c->weight = hweight64(c->idxmsk64); |
147 | } |
148 | } |
149 | |
150 | diff --git a/arch/x86/kernel/cpu/perf_event_intel_bts.c b/arch/x86/kernel/cpu/perf_event_intel_bts.c |
151 | index ac1f0c55f379..7795f3f8b1d5 100644 |
152 | --- a/arch/x86/kernel/cpu/perf_event_intel_bts.c |
153 | +++ b/arch/x86/kernel/cpu/perf_event_intel_bts.c |
154 | @@ -483,17 +483,26 @@ static int bts_event_add(struct perf_event *event, int mode) |
155 | |
156 | static void bts_event_destroy(struct perf_event *event) |
157 | { |
158 | + x86_release_hardware(); |
159 | x86_del_exclusive(x86_lbr_exclusive_bts); |
160 | } |
161 | |
162 | static int bts_event_init(struct perf_event *event) |
163 | { |
164 | + int ret; |
165 | + |
166 | if (event->attr.type != bts_pmu.type) |
167 | return -ENOENT; |
168 | |
169 | if (x86_add_exclusive(x86_lbr_exclusive_bts)) |
170 | return -EBUSY; |
171 | |
172 | + ret = x86_reserve_hardware(); |
173 | + if (ret) { |
174 | + x86_del_exclusive(x86_lbr_exclusive_bts); |
175 | + return ret; |
176 | + } |
177 | + |
178 | event->destroy = bts_event_destroy; |
179 | |
180 | return 0; |
181 | diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S |
182 | index 53eeb226657c..7e429c99c728 100644 |
183 | --- a/arch/x86/kernel/head_32.S |
184 | +++ b/arch/x86/kernel/head_32.S |
185 | @@ -62,9 +62,16 @@ |
186 | #define PAGE_TABLE_SIZE(pages) ((pages) / PTRS_PER_PGD) |
187 | #endif |
188 | |
189 | -/* Number of possible pages in the lowmem region */ |
190 | -LOWMEM_PAGES = (((1<<32) - __PAGE_OFFSET) >> PAGE_SHIFT) |
191 | - |
192 | +/* |
193 | + * Number of possible pages in the lowmem region. |
194 | + * |
195 | + * We shift 2 by 31 instead of 1 by 32 to the left in order to avoid a |
196 | + * gas warning about overflowing shift count when gas has been compiled |
197 | + * with only a host target support using a 32-bit type for internal |
198 | + * representation. |
199 | + */ |
200 | +LOWMEM_PAGES = (((2<<31) - __PAGE_OFFSET) >> PAGE_SHIFT) |
201 | + |
202 | /* Enough space to fit pagetables for the low memory linear map */ |
203 | MAPPING_BEYOND_END = PAGE_TABLE_SIZE(LOWMEM_PAGES) << PAGE_SHIFT |
204 | |
205 | diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c |
206 | index 8c81af6dbe06..e527a3e13939 100644 |
207 | --- a/drivers/bluetooth/ath3k.c |
208 | +++ b/drivers/bluetooth/ath3k.c |
209 | @@ -80,6 +80,7 @@ static const struct usb_device_id ath3k_table[] = { |
210 | { USB_DEVICE(0x0489, 0xe057) }, |
211 | { USB_DEVICE(0x0489, 0xe056) }, |
212 | { USB_DEVICE(0x0489, 0xe05f) }, |
213 | + { USB_DEVICE(0x0489, 0xe076) }, |
214 | { USB_DEVICE(0x0489, 0xe078) }, |
215 | { USB_DEVICE(0x04c5, 0x1330) }, |
216 | { USB_DEVICE(0x04CA, 0x3004) }, |
217 | @@ -88,6 +89,7 @@ static const struct usb_device_id ath3k_table[] = { |
218 | { USB_DEVICE(0x04CA, 0x3007) }, |
219 | { USB_DEVICE(0x04CA, 0x3008) }, |
220 | { USB_DEVICE(0x04CA, 0x300b) }, |
221 | + { USB_DEVICE(0x04CA, 0x300d) }, |
222 | { USB_DEVICE(0x04CA, 0x300f) }, |
223 | { USB_DEVICE(0x04CA, 0x3010) }, |
224 | { USB_DEVICE(0x0930, 0x0219) }, |
225 | @@ -113,6 +115,7 @@ static const struct usb_device_id ath3k_table[] = { |
226 | { USB_DEVICE(0x13d3, 0x3408) }, |
227 | { USB_DEVICE(0x13d3, 0x3423) }, |
228 | { USB_DEVICE(0x13d3, 0x3432) }, |
229 | + { USB_DEVICE(0x13d3, 0x3474) }, |
230 | |
231 | /* Atheros AR5BBU12 with sflash firmware */ |
232 | { USB_DEVICE(0x0489, 0xE02C) }, |
233 | @@ -137,6 +140,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = { |
234 | { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, |
235 | { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, |
236 | { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 }, |
237 | + { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 }, |
238 | { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 }, |
239 | { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, |
240 | { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 }, |
241 | @@ -145,6 +149,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = { |
242 | { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 }, |
243 | { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 }, |
244 | { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 }, |
245 | + { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 }, |
246 | { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 }, |
247 | { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 }, |
248 | { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 }, |
249 | @@ -170,6 +175,7 @@ static const struct usb_device_id ath3k_blist_tbl[] = { |
250 | { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 }, |
251 | { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 }, |
252 | { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 }, |
253 | + { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 }, |
254 | |
255 | /* Atheros AR5BBU22 with sflash firmware */ |
256 | { USB_DEVICE(0x0489, 0xE036), .driver_info = BTUSB_ATH3012 }, |
257 | diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c |
258 | index 3c10d4dfe9a7..420cc9f3eb76 100644 |
259 | --- a/drivers/bluetooth/btusb.c |
260 | +++ b/drivers/bluetooth/btusb.c |
261 | @@ -178,6 +178,7 @@ static const struct usb_device_id blacklist_table[] = { |
262 | { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 }, |
263 | { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 }, |
264 | { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 }, |
265 | + { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 }, |
266 | { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 }, |
267 | { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 }, |
268 | { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 }, |
269 | @@ -186,6 +187,7 @@ static const struct usb_device_id blacklist_table[] = { |
270 | { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 }, |
271 | { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 }, |
272 | { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 }, |
273 | + { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 }, |
274 | { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 }, |
275 | { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 }, |
276 | { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 }, |
277 | @@ -211,6 +213,7 @@ static const struct usb_device_id blacklist_table[] = { |
278 | { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 }, |
279 | { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 }, |
280 | { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 }, |
281 | + { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 }, |
282 | |
283 | /* Atheros AR5BBU12 with sflash firmware */ |
284 | { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE }, |
285 | diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c |
286 | index b2f9521fe551..4cdac7801c8b 100644 |
287 | --- a/drivers/net/wireless/b43/main.c |
288 | +++ b/drivers/net/wireless/b43/main.c |
289 | @@ -5365,6 +5365,10 @@ static void b43_supported_bands(struct b43_wldev *dev, bool *have_2ghz_phy, |
290 | *have_5ghz_phy = true; |
291 | return; |
292 | case 0x4321: /* BCM4306 */ |
293 | + /* There are 14e4:4321 PCI devs with 2.4 GHz BCM4321 (N-PHY) */ |
294 | + if (dev->phy.type != B43_PHYTYPE_G) |
295 | + break; |
296 | + /* fall through */ |
297 | case 0x4313: /* BCM4311 */ |
298 | case 0x431a: /* BCM4318 */ |
299 | case 0x432a: /* BCM4321 */ |
300 | diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c |
301 | index 5c8f58114677..a086e1d69bc7 100644 |
302 | --- a/drivers/usb/class/cdc-acm.c |
303 | +++ b/drivers/usb/class/cdc-acm.c |
304 | @@ -1477,6 +1477,11 @@ skip_countries: |
305 | goto alloc_fail8; |
306 | } |
307 | |
308 | + if (quirks & CLEAR_HALT_CONDITIONS) { |
309 | + usb_clear_halt(usb_dev, usb_rcvbulkpipe(usb_dev, epread->bEndpointAddress)); |
310 | + usb_clear_halt(usb_dev, usb_sndbulkpipe(usb_dev, epwrite->bEndpointAddress)); |
311 | + } |
312 | + |
313 | return 0; |
314 | alloc_fail8: |
315 | if (acm->country_codes) { |
316 | @@ -1756,6 +1761,10 @@ static const struct usb_device_id acm_ids[] = { |
317 | .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */ |
318 | }, |
319 | |
320 | + { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */ |
321 | + .driver_info = CLEAR_HALT_CONDITIONS, |
322 | + }, |
323 | + |
324 | /* Nokia S60 phones expose two ACM channels. The first is |
325 | * a modem and is picked up by the standard AT-command |
326 | * information below. The second is 'vendor-specific' but |
327 | diff --git a/drivers/usb/class/cdc-acm.h b/drivers/usb/class/cdc-acm.h |
328 | index ffeb3c83941f..b3b6c9db6fe5 100644 |
329 | --- a/drivers/usb/class/cdc-acm.h |
330 | +++ b/drivers/usb/class/cdc-acm.h |
331 | @@ -133,3 +133,4 @@ struct acm { |
332 | #define NO_DATA_INTERFACE BIT(4) |
333 | #define IGNORE_DEVICE BIT(5) |
334 | #define QUIRK_CONTROL_LINE_STATE BIT(6) |
335 | +#define CLEAR_HALT_CONDITIONS BIT(7) |
336 | diff --git a/kernel/events/core.c b/kernel/events/core.c |
337 | index eddf1ed4155e..0ceb386777ae 100644 |
338 | --- a/kernel/events/core.c |
339 | +++ b/kernel/events/core.c |
340 | @@ -4331,20 +4331,20 @@ static void ring_buffer_attach(struct perf_event *event, |
341 | WARN_ON_ONCE(event->rcu_pending); |
342 | |
343 | old_rb = event->rb; |
344 | - event->rcu_batches = get_state_synchronize_rcu(); |
345 | - event->rcu_pending = 1; |
346 | - |
347 | spin_lock_irqsave(&old_rb->event_lock, flags); |
348 | list_del_rcu(&event->rb_entry); |
349 | spin_unlock_irqrestore(&old_rb->event_lock, flags); |
350 | - } |
351 | |
352 | - if (event->rcu_pending && rb) { |
353 | - cond_synchronize_rcu(event->rcu_batches); |
354 | - event->rcu_pending = 0; |
355 | + event->rcu_batches = get_state_synchronize_rcu(); |
356 | + event->rcu_pending = 1; |
357 | } |
358 | |
359 | if (rb) { |
360 | + if (event->rcu_pending) { |
361 | + cond_synchronize_rcu(event->rcu_batches); |
362 | + event->rcu_pending = 0; |
363 | + } |
364 | + |
365 | spin_lock_irqsave(&rb->event_lock, flags); |
366 | list_add_rcu(&event->rb_entry, &rb->event_list); |
367 | spin_unlock_irqrestore(&rb->event_lock, flags); |
368 | diff --git a/tools/build/Makefile.build b/tools/build/Makefile.build |
369 | index 10df57237a66..98cfc388ea33 100644 |
370 | --- a/tools/build/Makefile.build |
371 | +++ b/tools/build/Makefile.build |
372 | @@ -94,12 +94,12 @@ obj-y := $(patsubst %/, %/$(obj)-in.o, $(obj-y)) |
373 | subdir-obj-y := $(filter %/$(obj)-in.o, $(obj-y)) |
374 | |
375 | # '$(OUTPUT)/dir' prefix to all objects |
376 | -prefix := $(subst ./,,$(OUTPUT)$(dir)/) |
377 | -obj-y := $(addprefix $(prefix),$(obj-y)) |
378 | -subdir-obj-y := $(addprefix $(prefix),$(subdir-obj-y)) |
379 | +objprefix := $(subst ./,,$(OUTPUT)$(dir)/) |
380 | +obj-y := $(addprefix $(objprefix),$(obj-y)) |
381 | +subdir-obj-y := $(addprefix $(objprefix),$(subdir-obj-y)) |
382 | |
383 | # Final '$(obj)-in.o' object |
384 | -in-target := $(prefix)$(obj)-in.o |
385 | +in-target := $(objprefix)$(obj)-in.o |
386 | |
387 | PHONY += $(subdir-y) |
388 |