Contents of /trunk/kernel26-alx/patches-3.10/0134-3.10.35-all-fixes.patch
Parent Directory | Revision Log
Revision 2672 -
(show annotations)
(download)
Tue Jul 21 16:46:35 2015 UTC (9 years, 2 months ago) by niro
File size: 33566 byte(s)
Tue Jul 21 16:46:35 2015 UTC (9 years, 2 months ago) by niro
File size: 33566 byte(s)
-3.10.84-alx-r1
1 | diff --git a/Makefile b/Makefile |
2 | index 571a1bf14868..06b31fce1ff5 100644 |
3 | --- a/Makefile |
4 | +++ b/Makefile |
5 | @@ -1,6 +1,6 @@ |
6 | VERSION = 3 |
7 | PATCHLEVEL = 10 |
8 | -SUBLEVEL = 34 |
9 | +SUBLEVEL = 35 |
10 | EXTRAVERSION = |
11 | NAME = TOSSUG Baby Fish |
12 | |
13 | diff --git a/arch/arm/include/asm/outercache.h b/arch/arm/include/asm/outercache.h |
14 | index 12f71a190422..f94784f0e3a6 100644 |
15 | --- a/arch/arm/include/asm/outercache.h |
16 | +++ b/arch/arm/include/asm/outercache.h |
17 | @@ -37,10 +37,10 @@ struct outer_cache_fns { |
18 | void (*resume)(void); |
19 | }; |
20 | |
21 | -#ifdef CONFIG_OUTER_CACHE |
22 | - |
23 | extern struct outer_cache_fns outer_cache; |
24 | |
25 | +#ifdef CONFIG_OUTER_CACHE |
26 | + |
27 | static inline void outer_inv_range(phys_addr_t start, phys_addr_t end) |
28 | { |
29 | if (outer_cache.inv_range) |
30 | diff --git a/arch/arm/mach-highbank/highbank.c b/arch/arm/mach-highbank/highbank.c |
31 | index 5ed19e88874b..35d1029d7c9d 100644 |
32 | --- a/arch/arm/mach-highbank/highbank.c |
33 | +++ b/arch/arm/mach-highbank/highbank.c |
34 | @@ -65,14 +65,12 @@ void highbank_set_cpu_jump(int cpu, void *jump_addr) |
35 | HB_JUMP_TABLE_PHYS(cpu) + 15); |
36 | } |
37 | |
38 | -#ifdef CONFIG_CACHE_L2X0 |
39 | static void highbank_l2x0_disable(void) |
40 | { |
41 | outer_flush_all(); |
42 | /* Disable PL310 L2 Cache controller */ |
43 | highbank_smc1(0x102, 0x0); |
44 | } |
45 | -#endif |
46 | |
47 | static void __init highbank_init_irq(void) |
48 | { |
49 | @@ -81,12 +79,13 @@ static void __init highbank_init_irq(void) |
50 | if (of_find_compatible_node(NULL, NULL, "arm,cortex-a9")) |
51 | highbank_scu_map_io(); |
52 | |
53 | -#ifdef CONFIG_CACHE_L2X0 |
54 | /* Enable PL310 L2 Cache controller */ |
55 | - highbank_smc1(0x102, 0x1); |
56 | - l2x0_of_init(0, ~0UL); |
57 | - outer_cache.disable = highbank_l2x0_disable; |
58 | -#endif |
59 | + if (IS_ENABLED(CONFIG_CACHE_L2X0) && |
60 | + of_find_compatible_node(NULL, NULL, "arm,pl310-cache")) { |
61 | + highbank_smc1(0x102, 0x1); |
62 | + l2x0_of_init(0, ~0UL); |
63 | + outer_cache.disable = highbank_l2x0_disable; |
64 | + } |
65 | } |
66 | |
67 | static void __init highbank_timer_init(void) |
68 | diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c |
69 | index 004cc87b781c..711c649f80b7 100644 |
70 | --- a/arch/x86/kvm/mmu.c |
71 | +++ b/arch/x86/kvm/mmu.c |
72 | @@ -2585,6 +2585,9 @@ static int __direct_map(struct kvm_vcpu *vcpu, gpa_t v, int write, |
73 | int emulate = 0; |
74 | gfn_t pseudo_gfn; |
75 | |
76 | + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa)) |
77 | + return 0; |
78 | + |
79 | for_each_shadow_entry(vcpu, (u64)gfn << PAGE_SHIFT, iterator) { |
80 | if (iterator.level == level) { |
81 | mmu_set_spte(vcpu, iterator.sptep, ACC_ALL, |
82 | @@ -2748,6 +2751,9 @@ static bool fast_page_fault(struct kvm_vcpu *vcpu, gva_t gva, int level, |
83 | bool ret = false; |
84 | u64 spte = 0ull; |
85 | |
86 | + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa)) |
87 | + return false; |
88 | + |
89 | if (!page_fault_can_be_fast(vcpu, error_code)) |
90 | return false; |
91 | |
92 | @@ -3139,6 +3145,9 @@ static u64 walk_shadow_page_get_mmio_spte(struct kvm_vcpu *vcpu, u64 addr) |
93 | struct kvm_shadow_walk_iterator iterator; |
94 | u64 spte = 0ull; |
95 | |
96 | + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa)) |
97 | + return spte; |
98 | + |
99 | walk_shadow_page_lockless_begin(vcpu); |
100 | for_each_shadow_entry_lockless(vcpu, addr, iterator, spte) |
101 | if (!is_shadow_present_pte(spte)) |
102 | @@ -4329,6 +4338,9 @@ int kvm_mmu_get_spte_hierarchy(struct kvm_vcpu *vcpu, u64 addr, u64 sptes[4]) |
103 | u64 spte; |
104 | int nr_sptes = 0; |
105 | |
106 | + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa)) |
107 | + return nr_sptes; |
108 | + |
109 | walk_shadow_page_lockless_begin(vcpu); |
110 | for_each_shadow_entry_lockless(vcpu, addr, iterator, spte) { |
111 | sptes[iterator.level-1] = spte; |
112 | diff --git a/arch/x86/kvm/paging_tmpl.h b/arch/x86/kvm/paging_tmpl.h |
113 | index da20860b457a..7e6090e13237 100644 |
114 | --- a/arch/x86/kvm/paging_tmpl.h |
115 | +++ b/arch/x86/kvm/paging_tmpl.h |
116 | @@ -423,6 +423,9 @@ static int FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr, |
117 | if (FNAME(gpte_changed)(vcpu, gw, top_level)) |
118 | goto out_gpte_changed; |
119 | |
120 | + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa)) |
121 | + goto out_gpte_changed; |
122 | + |
123 | for (shadow_walk_init(&it, vcpu, addr); |
124 | shadow_walk_okay(&it) && it.level > gw->level; |
125 | shadow_walk_next(&it)) { |
126 | @@ -671,6 +674,11 @@ static void FNAME(invlpg)(struct kvm_vcpu *vcpu, gva_t gva) |
127 | */ |
128 | mmu_topup_memory_caches(vcpu); |
129 | |
130 | + if (!VALID_PAGE(vcpu->arch.mmu.root_hpa)) { |
131 | + WARN_ON(1); |
132 | + return; |
133 | + } |
134 | + |
135 | spin_lock(&vcpu->kvm->mmu_lock); |
136 | for_each_shadow_entry(vcpu, gva, iterator) { |
137 | level = iterator.level; |
138 | diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c |
139 | index 5402c94ab768..7cdafb6dc705 100644 |
140 | --- a/arch/x86/kvm/vmx.c |
141 | +++ b/arch/x86/kvm/vmx.c |
142 | @@ -7133,8 +7133,8 @@ static void vmx_free_vcpu(struct kvm_vcpu *vcpu) |
143 | struct vcpu_vmx *vmx = to_vmx(vcpu); |
144 | |
145 | free_vpid(vmx); |
146 | - free_nested(vmx); |
147 | free_loaded_vmcs(vmx->loaded_vmcs); |
148 | + free_nested(vmx); |
149 | kfree(vmx->guest_msrs); |
150 | kvm_vcpu_uninit(vcpu); |
151 | kmem_cache_free(kvm_vcpu_cache, vmx); |
152 | diff --git a/arch/x86/net/bpf_jit.S b/arch/x86/net/bpf_jit.S |
153 | index 877b9a1b2152..01495755701b 100644 |
154 | --- a/arch/x86/net/bpf_jit.S |
155 | +++ b/arch/x86/net/bpf_jit.S |
156 | @@ -140,7 +140,7 @@ bpf_slow_path_byte_msh: |
157 | push %r9; \ |
158 | push SKBDATA; \ |
159 | /* rsi already has offset */ \ |
160 | - mov $SIZE,%ecx; /* size */ \ |
161 | + mov $SIZE,%edx; /* size */ \ |
162 | call bpf_internal_load_pointer_neg_helper; \ |
163 | test %rax,%rax; \ |
164 | pop SKBDATA; \ |
165 | diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c |
166 | index 1e8e42fb03a4..1fb1a7b5a754 100644 |
167 | --- a/drivers/input/mouse/elantech.c |
168 | +++ b/drivers/input/mouse/elantech.c |
169 | @@ -486,6 +486,7 @@ static void elantech_input_sync_v4(struct psmouse *psmouse) |
170 | unsigned char *packet = psmouse->packet; |
171 | |
172 | input_report_key(dev, BTN_LEFT, packet[0] & 0x01); |
173 | + input_report_key(dev, BTN_RIGHT, packet[0] & 0x02); |
174 | input_mt_report_pointer_emulation(dev, true); |
175 | input_sync(dev); |
176 | } |
177 | @@ -954,6 +955,44 @@ static int elantech_get_resolution_v4(struct psmouse *psmouse, |
178 | } |
179 | |
180 | /* |
181 | + * Advertise INPUT_PROP_BUTTONPAD for clickpads. The testing of bit 12 in |
182 | + * fw_version for this is based on the following fw_version & caps table: |
183 | + * |
184 | + * Laptop-model: fw_version: caps: buttons: |
185 | + * Acer S3 0x461f00 10, 13, 0e clickpad |
186 | + * Acer S7-392 0x581f01 50, 17, 0d clickpad |
187 | + * Acer V5-131 0x461f02 01, 16, 0c clickpad |
188 | + * Acer V5-551 0x461f00 ? clickpad |
189 | + * Asus K53SV 0x450f01 78, 15, 0c 2 hw buttons |
190 | + * Asus G46VW 0x460f02 00, 18, 0c 2 hw buttons |
191 | + * Asus G750JX 0x360f00 00, 16, 0c 2 hw buttons |
192 | + * Asus UX31 0x361f00 20, 15, 0e clickpad |
193 | + * Asus UX32VD 0x361f02 00, 15, 0e clickpad |
194 | + * Avatar AVIU-145A2 0x361f00 ? clickpad |
195 | + * Gigabyte U2442 0x450f01 58, 17, 0c 2 hw buttons |
196 | + * Lenovo L430 0x350f02 b9, 15, 0c 2 hw buttons (*) |
197 | + * Samsung NF210 0x150b00 78, 14, 0a 2 hw buttons |
198 | + * Samsung NP770Z5E 0x575f01 10, 15, 0f clickpad |
199 | + * Samsung NP700Z5B 0x361f06 21, 15, 0f clickpad |
200 | + * Samsung NP900X3E-A02 0x575f03 ? clickpad |
201 | + * Samsung NP-QX410 0x851b00 19, 14, 0c clickpad |
202 | + * Samsung RC512 0x450f00 08, 15, 0c 2 hw buttons |
203 | + * Samsung RF710 0x450f00 ? 2 hw buttons |
204 | + * System76 Pangolin 0x250f01 ? 2 hw buttons |
205 | + * (*) + 3 trackpoint buttons |
206 | + */ |
207 | +static void elantech_set_buttonpad_prop(struct psmouse *psmouse) |
208 | +{ |
209 | + struct input_dev *dev = psmouse->dev; |
210 | + struct elantech_data *etd = psmouse->private; |
211 | + |
212 | + if (etd->fw_version & 0x001000) { |
213 | + __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit); |
214 | + __clear_bit(BTN_RIGHT, dev->keybit); |
215 | + } |
216 | +} |
217 | + |
218 | +/* |
219 | * Set the appropriate event bits for the input subsystem |
220 | */ |
221 | static int elantech_set_input_params(struct psmouse *psmouse) |
222 | @@ -996,6 +1035,8 @@ static int elantech_set_input_params(struct psmouse *psmouse) |
223 | __set_bit(INPUT_PROP_SEMI_MT, dev->propbit); |
224 | /* fall through */ |
225 | case 3: |
226 | + if (etd->hw_version == 3) |
227 | + elantech_set_buttonpad_prop(psmouse); |
228 | input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0); |
229 | input_set_abs_params(dev, ABS_Y, y_min, y_max, 0, 0); |
230 | if (etd->reports_pressure) { |
231 | @@ -1017,9 +1058,7 @@ static int elantech_set_input_params(struct psmouse *psmouse) |
232 | */ |
233 | psmouse_warn(psmouse, "couldn't query resolution data.\n"); |
234 | } |
235 | - /* v4 is clickpad, with only one button. */ |
236 | - __set_bit(INPUT_PROP_BUTTONPAD, dev->propbit); |
237 | - __clear_bit(BTN_RIGHT, dev->keybit); |
238 | + elantech_set_buttonpad_prop(psmouse); |
239 | __set_bit(BTN_TOOL_QUADTAP, dev->keybit); |
240 | /* For X to recognize me as touchpad. */ |
241 | input_set_abs_params(dev, ABS_X, x_min, x_max, 0, 0); |
242 | diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c |
243 | index aaf23aeae2ea..3d838c0b495d 100644 |
244 | --- a/drivers/input/tablet/wacom_sys.c |
245 | +++ b/drivers/input/tablet/wacom_sys.c |
246 | @@ -339,7 +339,7 @@ static int wacom_parse_hid(struct usb_interface *intf, |
247 | struct usb_device *dev = interface_to_usbdev(intf); |
248 | char limit = 0; |
249 | /* result has to be defined as int for some devices */ |
250 | - int result = 0; |
251 | + int result = 0, touch_max = 0; |
252 | int i = 0, usage = WCM_UNDEFINED, finger = 0, pen = 0; |
253 | unsigned char *report; |
254 | |
255 | @@ -386,7 +386,8 @@ static int wacom_parse_hid(struct usb_interface *intf, |
256 | if (usage == WCM_DESKTOP) { |
257 | if (finger) { |
258 | features->device_type = BTN_TOOL_FINGER; |
259 | - |
260 | + /* touch device at least supports one touch point */ |
261 | + touch_max = 1; |
262 | switch (features->type) { |
263 | case TABLETPC2FG: |
264 | features->pktlen = WACOM_PKGLEN_TPC2FG; |
265 | @@ -539,6 +540,8 @@ static int wacom_parse_hid(struct usb_interface *intf, |
266 | } |
267 | |
268 | out: |
269 | + if (!features->touch_max && touch_max) |
270 | + features->touch_max = touch_max; |
271 | result = 0; |
272 | kfree(report); |
273 | return result; |
274 | diff --git a/drivers/media/pci/cx18/cx18-driver.c b/drivers/media/pci/cx18/cx18-driver.c |
275 | index 13c9718a5ace..16e89f026bca 100644 |
276 | --- a/drivers/media/pci/cx18/cx18-driver.c |
277 | +++ b/drivers/media/pci/cx18/cx18-driver.c |
278 | @@ -327,13 +327,16 @@ void cx18_read_eeprom(struct cx18 *cx, struct tveeprom *tv) |
279 | struct i2c_client *c; |
280 | u8 eedata[256]; |
281 | |
282 | + memset(tv, 0, sizeof(*tv)); |
283 | + |
284 | c = kzalloc(sizeof(*c), GFP_KERNEL); |
285 | + if (!c) |
286 | + return; |
287 | |
288 | strlcpy(c->name, "cx18 tveeprom tmp", sizeof(c->name)); |
289 | c->adapter = &cx->i2c_adap[0]; |
290 | c->addr = 0xa0 >> 1; |
291 | |
292 | - memset(tv, 0, sizeof(*tv)); |
293 | if (tveeprom_read(c, eedata, sizeof(eedata))) |
294 | goto ret; |
295 | |
296 | diff --git a/drivers/media/usb/dvb-usb/cxusb.c b/drivers/media/usb/dvb-usb/cxusb.c |
297 | index 20e345d9fe8f..a1c641e18362 100644 |
298 | --- a/drivers/media/usb/dvb-usb/cxusb.c |
299 | +++ b/drivers/media/usb/dvb-usb/cxusb.c |
300 | @@ -149,6 +149,7 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
301 | int num) |
302 | { |
303 | struct dvb_usb_device *d = i2c_get_adapdata(adap); |
304 | + int ret; |
305 | int i; |
306 | |
307 | if (mutex_lock_interruptible(&d->i2c_mutex) < 0) |
308 | @@ -173,7 +174,8 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
309 | if (1 + msg[i].len > sizeof(ibuf)) { |
310 | warn("i2c rd: len=%d is too big!\n", |
311 | msg[i].len); |
312 | - return -EOPNOTSUPP; |
313 | + ret = -EOPNOTSUPP; |
314 | + goto unlock; |
315 | } |
316 | obuf[0] = 0; |
317 | obuf[1] = msg[i].len; |
318 | @@ -193,12 +195,14 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
319 | if (3 + msg[i].len > sizeof(obuf)) { |
320 | warn("i2c wr: len=%d is too big!\n", |
321 | msg[i].len); |
322 | - return -EOPNOTSUPP; |
323 | + ret = -EOPNOTSUPP; |
324 | + goto unlock; |
325 | } |
326 | if (1 + msg[i + 1].len > sizeof(ibuf)) { |
327 | warn("i2c rd: len=%d is too big!\n", |
328 | msg[i + 1].len); |
329 | - return -EOPNOTSUPP; |
330 | + ret = -EOPNOTSUPP; |
331 | + goto unlock; |
332 | } |
333 | obuf[0] = msg[i].len; |
334 | obuf[1] = msg[i+1].len; |
335 | @@ -223,7 +227,8 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
336 | if (2 + msg[i].len > sizeof(obuf)) { |
337 | warn("i2c wr: len=%d is too big!\n", |
338 | msg[i].len); |
339 | - return -EOPNOTSUPP; |
340 | + ret = -EOPNOTSUPP; |
341 | + goto unlock; |
342 | } |
343 | obuf[0] = msg[i].addr; |
344 | obuf[1] = msg[i].len; |
345 | @@ -237,8 +242,14 @@ static int cxusb_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
346 | } |
347 | } |
348 | |
349 | + if (i == num) |
350 | + ret = num; |
351 | + else |
352 | + ret = -EREMOTEIO; |
353 | + |
354 | +unlock: |
355 | mutex_unlock(&d->i2c_mutex); |
356 | - return i == num ? num : -EREMOTEIO; |
357 | + return ret; |
358 | } |
359 | |
360 | static u32 cxusb_i2c_func(struct i2c_adapter *adapter) |
361 | diff --git a/drivers/media/usb/dvb-usb/dw2102.c b/drivers/media/usb/dvb-usb/dw2102.c |
362 | index 71b22f5a05ce..4170a45d17e0 100644 |
363 | --- a/drivers/media/usb/dvb-usb/dw2102.c |
364 | +++ b/drivers/media/usb/dvb-usb/dw2102.c |
365 | @@ -301,6 +301,7 @@ static int dw2102_serit_i2c_transfer(struct i2c_adapter *adap, |
366 | static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], int num) |
367 | { |
368 | struct dvb_usb_device *d = i2c_get_adapdata(adap); |
369 | + int ret; |
370 | |
371 | if (!d) |
372 | return -ENODEV; |
373 | @@ -316,7 +317,8 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms |
374 | if (2 + msg[1].len > sizeof(ibuf)) { |
375 | warn("i2c rd: len=%d is too big!\n", |
376 | msg[1].len); |
377 | - return -EOPNOTSUPP; |
378 | + ret = -EOPNOTSUPP; |
379 | + goto unlock; |
380 | } |
381 | |
382 | obuf[0] = msg[0].addr << 1; |
383 | @@ -340,7 +342,8 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms |
384 | if (2 + msg[0].len > sizeof(obuf)) { |
385 | warn("i2c wr: len=%d is too big!\n", |
386 | msg[1].len); |
387 | - return -EOPNOTSUPP; |
388 | + ret = -EOPNOTSUPP; |
389 | + goto unlock; |
390 | } |
391 | |
392 | obuf[0] = msg[0].addr << 1; |
393 | @@ -357,7 +360,8 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms |
394 | if (2 + msg[0].len > sizeof(obuf)) { |
395 | warn("i2c wr: len=%d is too big!\n", |
396 | msg[1].len); |
397 | - return -EOPNOTSUPP; |
398 | + ret = -EOPNOTSUPP; |
399 | + goto unlock; |
400 | } |
401 | |
402 | obuf[0] = msg[0].addr << 1; |
403 | @@ -386,15 +390,17 @@ static int dw2102_earda_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg ms |
404 | |
405 | break; |
406 | } |
407 | + ret = num; |
408 | |
409 | +unlock: |
410 | mutex_unlock(&d->i2c_mutex); |
411 | - return num; |
412 | + return ret; |
413 | } |
414 | |
415 | static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], int num) |
416 | { |
417 | struct dvb_usb_device *d = i2c_get_adapdata(adap); |
418 | - int len, i, j; |
419 | + int len, i, j, ret; |
420 | |
421 | if (!d) |
422 | return -ENODEV; |
423 | @@ -430,7 +436,8 @@ static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], i |
424 | if (2 + msg[j].len > sizeof(ibuf)) { |
425 | warn("i2c rd: len=%d is too big!\n", |
426 | msg[j].len); |
427 | - return -EOPNOTSUPP; |
428 | + ret = -EOPNOTSUPP; |
429 | + goto unlock; |
430 | } |
431 | |
432 | dw210x_op_rw(d->udev, 0xc3, |
433 | @@ -466,7 +473,8 @@ static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], i |
434 | if (2 + msg[j].len > sizeof(obuf)) { |
435 | warn("i2c wr: len=%d is too big!\n", |
436 | msg[j].len); |
437 | - return -EOPNOTSUPP; |
438 | + ret = -EOPNOTSUPP; |
439 | + goto unlock; |
440 | } |
441 | |
442 | obuf[0] = msg[j].addr << 1; |
443 | @@ -481,15 +489,18 @@ static int dw2104_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], i |
444 | } |
445 | |
446 | } |
447 | + ret = num; |
448 | |
449 | +unlock: |
450 | mutex_unlock(&d->i2c_mutex); |
451 | - return num; |
452 | + return ret; |
453 | } |
454 | |
455 | static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
456 | int num) |
457 | { |
458 | struct dvb_usb_device *d = i2c_get_adapdata(adap); |
459 | + int ret; |
460 | int i; |
461 | |
462 | if (!d) |
463 | @@ -506,7 +517,8 @@ static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
464 | if (2 + msg[1].len > sizeof(ibuf)) { |
465 | warn("i2c rd: len=%d is too big!\n", |
466 | msg[1].len); |
467 | - return -EOPNOTSUPP; |
468 | + ret = -EOPNOTSUPP; |
469 | + goto unlock; |
470 | } |
471 | obuf[0] = msg[0].addr << 1; |
472 | obuf[1] = msg[0].len; |
473 | @@ -530,7 +542,8 @@ static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
474 | if (2 + msg[0].len > sizeof(obuf)) { |
475 | warn("i2c wr: len=%d is too big!\n", |
476 | msg[0].len); |
477 | - return -EOPNOTSUPP; |
478 | + ret = -EOPNOTSUPP; |
479 | + goto unlock; |
480 | } |
481 | obuf[0] = msg[0].addr << 1; |
482 | obuf[1] = msg[0].len; |
483 | @@ -556,9 +569,11 @@ static int dw3101_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
484 | msg[i].flags == 0 ? ">>>" : "<<<"); |
485 | debug_dump(msg[i].buf, msg[i].len, deb_xfer); |
486 | } |
487 | + ret = num; |
488 | |
489 | +unlock: |
490 | mutex_unlock(&d->i2c_mutex); |
491 | - return num; |
492 | + return ret; |
493 | } |
494 | |
495 | static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
496 | @@ -566,7 +581,7 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
497 | { |
498 | struct dvb_usb_device *d = i2c_get_adapdata(adap); |
499 | struct usb_device *udev; |
500 | - int len, i, j; |
501 | + int len, i, j, ret; |
502 | |
503 | if (!d) |
504 | return -ENODEV; |
505 | @@ -618,7 +633,8 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
506 | if (msg[j].len > sizeof(ibuf)) { |
507 | warn("i2c rd: len=%d is too big!\n", |
508 | msg[j].len); |
509 | - return -EOPNOTSUPP; |
510 | + ret = -EOPNOTSUPP; |
511 | + goto unlock; |
512 | } |
513 | |
514 | dw210x_op_rw(d->udev, 0x91, 0, 0, |
515 | @@ -652,7 +668,8 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
516 | if (2 + msg[j].len > sizeof(obuf)) { |
517 | warn("i2c wr: len=%d is too big!\n", |
518 | msg[j].len); |
519 | - return -EOPNOTSUPP; |
520 | + ret = -EOPNOTSUPP; |
521 | + goto unlock; |
522 | } |
523 | |
524 | obuf[0] = msg[j + 1].len; |
525 | @@ -671,7 +688,8 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
526 | if (2 + msg[j].len > sizeof(obuf)) { |
527 | warn("i2c wr: len=%d is too big!\n", |
528 | msg[j].len); |
529 | - return -EOPNOTSUPP; |
530 | + ret = -EOPNOTSUPP; |
531 | + goto unlock; |
532 | } |
533 | obuf[0] = msg[j].len + 1; |
534 | obuf[1] = (msg[j].addr << 1); |
535 | @@ -685,9 +703,11 @@ static int s6x0_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
536 | } |
537 | } |
538 | } |
539 | + ret = num; |
540 | |
541 | +unlock: |
542 | mutex_unlock(&d->i2c_mutex); |
543 | - return num; |
544 | + return ret; |
545 | } |
546 | |
547 | static int su3000_i2c_transfer(struct i2c_adapter *adap, struct i2c_msg msg[], |
548 | diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c |
549 | index d2bea3f07c73..69d3f59f8728 100644 |
550 | --- a/drivers/net/ethernet/intel/e100.c |
551 | +++ b/drivers/net/ethernet/intel/e100.c |
552 | @@ -3039,7 +3039,7 @@ static void __e100_shutdown(struct pci_dev *pdev, bool *enable_wake) |
553 | *enable_wake = false; |
554 | } |
555 | |
556 | - pci_disable_device(pdev); |
557 | + pci_clear_master(pdev); |
558 | } |
559 | |
560 | static int __e100_power_off(struct pci_dev *pdev, bool wake) |
561 | diff --git a/drivers/net/wireless/p54/txrx.c b/drivers/net/wireless/p54/txrx.c |
562 | index f95de0d16216..1de59b0f8fa8 100644 |
563 | --- a/drivers/net/wireless/p54/txrx.c |
564 | +++ b/drivers/net/wireless/p54/txrx.c |
565 | @@ -587,7 +587,7 @@ static void p54_rx_stats(struct p54_common *priv, struct sk_buff *skb) |
566 | chan = priv->curchan; |
567 | if (chan) { |
568 | struct survey_info *survey = &priv->survey[chan->hw_value]; |
569 | - survey->noise = clamp_t(s8, priv->noise, -128, 127); |
570 | + survey->noise = clamp(priv->noise, -128, 127); |
571 | survey->channel_time = priv->survey_raw.active; |
572 | survey->channel_time_tx = priv->survey_raw.tx; |
573 | survey->channel_time_busy = priv->survey_raw.tx + |
574 | diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c |
575 | index c59cc6ed7adb..a86d12326137 100644 |
576 | --- a/drivers/regulator/core.c |
577 | +++ b/drivers/regulator/core.c |
578 | @@ -1712,8 +1712,6 @@ static int _regulator_do_disable(struct regulator_dev *rdev) |
579 | |
580 | trace_regulator_disable_complete(rdev_get_name(rdev)); |
581 | |
582 | - _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE, |
583 | - NULL); |
584 | return 0; |
585 | } |
586 | |
587 | @@ -1737,6 +1735,8 @@ static int _regulator_disable(struct regulator_dev *rdev) |
588 | rdev_err(rdev, "failed to disable\n"); |
589 | return ret; |
590 | } |
591 | + _notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE, |
592 | + NULL); |
593 | } |
594 | |
595 | rdev->use_count = 0; |
596 | @@ -1789,20 +1789,16 @@ static int _regulator_force_disable(struct regulator_dev *rdev) |
597 | { |
598 | int ret = 0; |
599 | |
600 | - /* force disable */ |
601 | - if (rdev->desc->ops->disable) { |
602 | - /* ah well, who wants to live forever... */ |
603 | - ret = rdev->desc->ops->disable(rdev); |
604 | - if (ret < 0) { |
605 | - rdev_err(rdev, "failed to force disable\n"); |
606 | - return ret; |
607 | - } |
608 | - /* notify other consumers that power has been forced off */ |
609 | - _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE | |
610 | - REGULATOR_EVENT_DISABLE, NULL); |
611 | + ret = _regulator_do_disable(rdev); |
612 | + if (ret < 0) { |
613 | + rdev_err(rdev, "failed to force disable\n"); |
614 | + return ret; |
615 | } |
616 | |
617 | - return ret; |
618 | + _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE | |
619 | + REGULATOR_EVENT_DISABLE, NULL); |
620 | + |
621 | + return 0; |
622 | } |
623 | |
624 | /** |
625 | @@ -3788,8 +3784,6 @@ int regulator_suspend_finish(void) |
626 | |
627 | mutex_lock(®ulator_list_mutex); |
628 | list_for_each_entry(rdev, ®ulator_list, list) { |
629 | - struct regulator_ops *ops = rdev->desc->ops; |
630 | - |
631 | mutex_lock(&rdev->mutex); |
632 | if (rdev->use_count > 0 || rdev->constraints->always_on) { |
633 | error = _regulator_do_enable(rdev); |
634 | @@ -3798,12 +3792,10 @@ int regulator_suspend_finish(void) |
635 | } else { |
636 | if (!has_full_constraints) |
637 | goto unlock; |
638 | - if (!ops->disable) |
639 | - goto unlock; |
640 | if (!_regulator_is_enabled(rdev)) |
641 | goto unlock; |
642 | |
643 | - error = ops->disable(rdev); |
644 | + error = _regulator_do_disable(rdev); |
645 | if (error) |
646 | ret = error; |
647 | } |
648 | @@ -3993,7 +3985,7 @@ static int __init regulator_init_complete(void) |
649 | ops = rdev->desc->ops; |
650 | c = rdev->constraints; |
651 | |
652 | - if (!ops->disable || (c && c->always_on)) |
653 | + if (c && c->always_on) |
654 | continue; |
655 | |
656 | mutex_lock(&rdev->mutex); |
657 | @@ -4014,7 +4006,7 @@ static int __init regulator_init_complete(void) |
658 | /* We log since this may kill the system if it |
659 | * goes wrong. */ |
660 | rdev_info(rdev, "disabling\n"); |
661 | - ret = ops->disable(rdev); |
662 | + ret = _regulator_do_disable(rdev); |
663 | if (ret != 0) { |
664 | rdev_err(rdev, "couldn't disable: %d\n", ret); |
665 | } |
666 | diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c |
667 | index 159e3c6d92b9..3581416a24d8 100644 |
668 | --- a/drivers/usb/host/xhci-pci.c |
669 | +++ b/drivers/usb/host/xhci-pci.c |
670 | @@ -113,6 +113,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) |
671 | xhci_dbg(xhci, "QUIRK: Resetting on resume\n"); |
672 | xhci->quirks |= XHCI_TRUST_TX_LENGTH; |
673 | } |
674 | + if (pdev->vendor == PCI_VENDOR_ID_RENESAS && |
675 | + pdev->device == 0x0015 && |
676 | + pdev->subsystem_vendor == PCI_VENDOR_ID_SAMSUNG && |
677 | + pdev->subsystem_device == 0xc0cd) |
678 | + xhci->quirks |= XHCI_RESET_ON_RESUME; |
679 | if (pdev->vendor == PCI_VENDOR_ID_VIA) |
680 | xhci->quirks |= XHCI_RESET_ON_RESUME; |
681 | } |
682 | diff --git a/include/linux/ceph/osd_client.h b/include/linux/ceph/osd_client.h |
683 | index 8f47625a0661..4fb6a8938957 100644 |
684 | --- a/include/linux/ceph/osd_client.h |
685 | +++ b/include/linux/ceph/osd_client.h |
686 | @@ -138,6 +138,7 @@ struct ceph_osd_request { |
687 | __le64 *r_request_pool; |
688 | void *r_request_pgid; |
689 | __le32 *r_request_attempts; |
690 | + bool r_paused; |
691 | struct ceph_eversion *r_request_reassert_version; |
692 | |
693 | int r_result; |
694 | diff --git a/include/linux/ftrace_event.h b/include/linux/ftrace_event.h |
695 | index 120d57a1c3a5..b5e36017acd7 100644 |
696 | --- a/include/linux/ftrace_event.h |
697 | +++ b/include/linux/ftrace_event.h |
698 | @@ -325,10 +325,6 @@ enum { |
699 | FILTER_TRACE_FN, |
700 | }; |
701 | |
702 | -#define EVENT_STORAGE_SIZE 128 |
703 | -extern struct mutex event_storage_mutex; |
704 | -extern char event_storage[EVENT_STORAGE_SIZE]; |
705 | - |
706 | extern int trace_event_raw_init(struct ftrace_event_call *call); |
707 | extern int trace_define_field(struct ftrace_event_call *call, const char *type, |
708 | const char *name, int offset, int size, |
709 | diff --git a/include/trace/ftrace.h b/include/trace/ftrace.h |
710 | index 66dba42128d7..dbb47418df81 100644 |
711 | --- a/include/trace/ftrace.h |
712 | +++ b/include/trace/ftrace.h |
713 | @@ -299,15 +299,12 @@ static struct trace_event_functions ftrace_event_type_funcs_##call = { \ |
714 | #undef __array |
715 | #define __array(type, item, len) \ |
716 | do { \ |
717 | - mutex_lock(&event_storage_mutex); \ |
718 | + char *type_str = #type"["__stringify(len)"]"; \ |
719 | BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \ |
720 | - snprintf(event_storage, sizeof(event_storage), \ |
721 | - "%s[%d]", #type, len); \ |
722 | - ret = trace_define_field(event_call, event_storage, #item, \ |
723 | + ret = trace_define_field(event_call, type_str, #item, \ |
724 | offsetof(typeof(field), item), \ |
725 | sizeof(field.item), \ |
726 | is_signed_type(type), FILTER_OTHER); \ |
727 | - mutex_unlock(&event_storage_mutex); \ |
728 | if (ret) \ |
729 | return ret; \ |
730 | } while (0); |
731 | diff --git a/kernel/sched/auto_group.c b/kernel/sched/auto_group.c |
732 | index 64de5f8b0c9e..4a073539c58e 100644 |
733 | --- a/kernel/sched/auto_group.c |
734 | +++ b/kernel/sched/auto_group.c |
735 | @@ -77,8 +77,6 @@ static inline struct autogroup *autogroup_create(void) |
736 | if (IS_ERR(tg)) |
737 | goto out_free; |
738 | |
739 | - sched_online_group(tg, &root_task_group); |
740 | - |
741 | kref_init(&ag->kref); |
742 | init_rwsem(&ag->lock); |
743 | ag->id = atomic_inc_return(&autogroup_seq_nr); |
744 | @@ -98,6 +96,7 @@ static inline struct autogroup *autogroup_create(void) |
745 | #endif |
746 | tg->autogroup = ag; |
747 | |
748 | + sched_online_group(tg, &root_task_group); |
749 | return ag; |
750 | |
751 | out_free: |
752 | diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c |
753 | index 2f4b185bfc23..001b349af939 100644 |
754 | --- a/kernel/trace/trace_events.c |
755 | +++ b/kernel/trace/trace_events.c |
756 | @@ -27,12 +27,6 @@ |
757 | |
758 | DEFINE_MUTEX(event_mutex); |
759 | |
760 | -DEFINE_MUTEX(event_storage_mutex); |
761 | -EXPORT_SYMBOL_GPL(event_storage_mutex); |
762 | - |
763 | -char event_storage[EVENT_STORAGE_SIZE]; |
764 | -EXPORT_SYMBOL_GPL(event_storage); |
765 | - |
766 | LIST_HEAD(ftrace_events); |
767 | static LIST_HEAD(ftrace_common_fields); |
768 | |
769 | diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c |
770 | index d21a74670088..d7d0b50b1b70 100644 |
771 | --- a/kernel/trace/trace_export.c |
772 | +++ b/kernel/trace/trace_export.c |
773 | @@ -95,15 +95,12 @@ static void __always_unused ____ftrace_check_##name(void) \ |
774 | #undef __array |
775 | #define __array(type, item, len) \ |
776 | do { \ |
777 | + char *type_str = #type"["__stringify(len)"]"; \ |
778 | BUILD_BUG_ON(len > MAX_FILTER_STR_VAL); \ |
779 | - mutex_lock(&event_storage_mutex); \ |
780 | - snprintf(event_storage, sizeof(event_storage), \ |
781 | - "%s[%d]", #type, len); \ |
782 | - ret = trace_define_field(event_call, event_storage, #item, \ |
783 | + ret = trace_define_field(event_call, type_str, #item, \ |
784 | offsetof(typeof(field), item), \ |
785 | sizeof(field.item), \ |
786 | is_signed_type(type), filter_type); \ |
787 | - mutex_unlock(&event_storage_mutex); \ |
788 | if (ret) \ |
789 | return ret; \ |
790 | } while (0); |
791 | diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c |
792 | index bc0016e3e5ac..3663a305daf7 100644 |
793 | --- a/net/ceph/osd_client.c |
794 | +++ b/net/ceph/osd_client.c |
795 | @@ -1225,6 +1225,22 @@ void ceph_osdc_set_request_linger(struct ceph_osd_client *osdc, |
796 | EXPORT_SYMBOL(ceph_osdc_set_request_linger); |
797 | |
798 | /* |
799 | + * Returns whether a request should be blocked from being sent |
800 | + * based on the current osdmap and osd_client settings. |
801 | + * |
802 | + * Caller should hold map_sem for read. |
803 | + */ |
804 | +static bool __req_should_be_paused(struct ceph_osd_client *osdc, |
805 | + struct ceph_osd_request *req) |
806 | +{ |
807 | + bool pauserd = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD); |
808 | + bool pausewr = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR) || |
809 | + ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL); |
810 | + return (req->r_flags & CEPH_OSD_FLAG_READ && pauserd) || |
811 | + (req->r_flags & CEPH_OSD_FLAG_WRITE && pausewr); |
812 | +} |
813 | + |
814 | +/* |
815 | * Pick an osd (the first 'up' osd in the pg), allocate the osd struct |
816 | * (as needed), and set the request r_osd appropriately. If there is |
817 | * no up osd, set r_osd to NULL. Move the request to the appropriate list |
818 | @@ -1241,6 +1257,7 @@ static int __map_request(struct ceph_osd_client *osdc, |
819 | int acting[CEPH_PG_MAX_SIZE]; |
820 | int o = -1, num = 0; |
821 | int err; |
822 | + bool was_paused; |
823 | |
824 | dout("map_request %p tid %lld\n", req, req->r_tid); |
825 | err = ceph_calc_ceph_pg(&pgid, req->r_oid, osdc->osdmap, |
826 | @@ -1257,12 +1274,18 @@ static int __map_request(struct ceph_osd_client *osdc, |
827 | num = err; |
828 | } |
829 | |
830 | + was_paused = req->r_paused; |
831 | + req->r_paused = __req_should_be_paused(osdc, req); |
832 | + if (was_paused && !req->r_paused) |
833 | + force_resend = 1; |
834 | + |
835 | if ((!force_resend && |
836 | req->r_osd && req->r_osd->o_osd == o && |
837 | req->r_sent >= req->r_osd->o_incarnation && |
838 | req->r_num_pg_osds == num && |
839 | memcmp(req->r_pg_osds, acting, sizeof(acting[0])*num) == 0) || |
840 | - (req->r_osd == NULL && o == -1)) |
841 | + (req->r_osd == NULL && o == -1) || |
842 | + req->r_paused) |
843 | return 0; /* no change */ |
844 | |
845 | dout("map_request tid %llu pgid %lld.%x osd%d (was osd%d)\n", |
846 | @@ -1606,14 +1629,17 @@ static void reset_changed_osds(struct ceph_osd_client *osdc) |
847 | * |
848 | * Caller should hold map_sem for read. |
849 | */ |
850 | -static void kick_requests(struct ceph_osd_client *osdc, int force_resend) |
851 | +static void kick_requests(struct ceph_osd_client *osdc, bool force_resend, |
852 | + bool force_resend_writes) |
853 | { |
854 | struct ceph_osd_request *req, *nreq; |
855 | struct rb_node *p; |
856 | int needmap = 0; |
857 | int err; |
858 | + bool force_resend_req; |
859 | |
860 | - dout("kick_requests %s\n", force_resend ? " (force resend)" : ""); |
861 | + dout("kick_requests %s %s\n", force_resend ? " (force resend)" : "", |
862 | + force_resend_writes ? " (force resend writes)" : ""); |
863 | mutex_lock(&osdc->request_mutex); |
864 | for (p = rb_first(&osdc->requests); p; ) { |
865 | req = rb_entry(p, struct ceph_osd_request, r_node); |
866 | @@ -1638,7 +1664,10 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend) |
867 | continue; |
868 | } |
869 | |
870 | - err = __map_request(osdc, req, force_resend); |
871 | + force_resend_req = force_resend || |
872 | + (force_resend_writes && |
873 | + req->r_flags & CEPH_OSD_FLAG_WRITE); |
874 | + err = __map_request(osdc, req, force_resend_req); |
875 | if (err < 0) |
876 | continue; /* error */ |
877 | if (req->r_osd == NULL) { |
878 | @@ -1658,7 +1687,8 @@ static void kick_requests(struct ceph_osd_client *osdc, int force_resend) |
879 | r_linger_item) { |
880 | dout("linger req=%p req->r_osd=%p\n", req, req->r_osd); |
881 | |
882 | - err = __map_request(osdc, req, force_resend); |
883 | + err = __map_request(osdc, req, |
884 | + force_resend || force_resend_writes); |
885 | dout("__map_request returned %d\n", err); |
886 | if (err == 0) |
887 | continue; /* no change and no osd was specified */ |
888 | @@ -1700,6 +1730,7 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg) |
889 | struct ceph_osdmap *newmap = NULL, *oldmap; |
890 | int err; |
891 | struct ceph_fsid fsid; |
892 | + bool was_full; |
893 | |
894 | dout("handle_map have %u\n", osdc->osdmap ? osdc->osdmap->epoch : 0); |
895 | p = msg->front.iov_base; |
896 | @@ -1713,6 +1744,8 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg) |
897 | |
898 | down_write(&osdc->map_sem); |
899 | |
900 | + was_full = ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL); |
901 | + |
902 | /* incremental maps */ |
903 | ceph_decode_32_safe(&p, end, nr_maps, bad); |
904 | dout(" %d inc maps\n", nr_maps); |
905 | @@ -1737,7 +1770,10 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg) |
906 | ceph_osdmap_destroy(osdc->osdmap); |
907 | osdc->osdmap = newmap; |
908 | } |
909 | - kick_requests(osdc, 0); |
910 | + was_full = was_full || |
911 | + ceph_osdmap_flag(osdc->osdmap, |
912 | + CEPH_OSDMAP_FULL); |
913 | + kick_requests(osdc, 0, was_full); |
914 | } else { |
915 | dout("ignoring incremental map %u len %d\n", |
916 | epoch, maplen); |
917 | @@ -1780,7 +1816,10 @@ void ceph_osdc_handle_map(struct ceph_osd_client *osdc, struct ceph_msg *msg) |
918 | skipped_map = 1; |
919 | ceph_osdmap_destroy(oldmap); |
920 | } |
921 | - kick_requests(osdc, skipped_map); |
922 | + was_full = was_full || |
923 | + ceph_osdmap_flag(osdc->osdmap, |
924 | + CEPH_OSDMAP_FULL); |
925 | + kick_requests(osdc, skipped_map, was_full); |
926 | } |
927 | p += maplen; |
928 | nr_maps--; |
929 | @@ -1797,7 +1836,9 @@ done: |
930 | * we find out when we are no longer full and stop returning |
931 | * ENOSPC. |
932 | */ |
933 | - if (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL)) |
934 | + if (ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_FULL) || |
935 | + ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSERD) || |
936 | + ceph_osdmap_flag(osdc->osdmap, CEPH_OSDMAP_PAUSEWR)) |
937 | ceph_monc_request_next_osdmap(&osdc->client->monc); |
938 | |
939 | mutex_lock(&osdc->request_mutex); |
940 | diff --git a/scripts/package/builddeb b/scripts/package/builddeb |
941 | index acb86507828a..3001ec5ae07d 100644 |
942 | --- a/scripts/package/builddeb |
943 | +++ b/scripts/package/builddeb |
944 | @@ -62,7 +62,7 @@ create_package() { |
945 | fi |
946 | |
947 | # Create the package |
948 | - dpkg-gencontrol -isp $forcearch -p$pname -P"$pdir" |
949 | + dpkg-gencontrol -isp $forcearch -Vkernel:debarch="${debarch:-$(dpkg --print-architecture)}" -p$pname -P"$pdir" |
950 | dpkg --build "$pdir" .. |
951 | } |
952 | |
953 | @@ -252,15 +252,14 @@ mkdir -p "$destdir" |
954 | (cd $objtree; tar -c -f - -T "$objtree/debian/hdrobjfiles") | (cd $destdir; tar -xf -) |
955 | ln -sf "/usr/src/linux-headers-$version" "$kernel_headers_dir/lib/modules/$version/build" |
956 | rm -f "$objtree/debian/hdrsrcfiles" "$objtree/debian/hdrobjfiles" |
957 | -arch=$(dpkg --print-architecture) |
958 | |
959 | cat <<EOF >> debian/control |
960 | |
961 | Package: $kernel_headers_packagename |
962 | Provides: linux-headers, linux-headers-2.6 |
963 | -Architecture: $arch |
964 | -Description: Linux kernel headers for $KERNELRELEASE on $arch |
965 | - This package provides kernel header files for $KERNELRELEASE on $arch |
966 | +Architecture: any |
967 | +Description: Linux kernel headers for $KERNELRELEASE on \${kernel:debarch} |
968 | + This package provides kernel header files for $KERNELRELEASE on \${kernel:debarch} |
969 | . |
970 | This is useful for people who need to build external modules |
971 | EOF |
972 | diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c |
973 | index 19799931c51d..3fdf998ad057 100644 |
974 | --- a/sound/core/compress_offload.c |
975 | +++ b/sound/core/compress_offload.c |
976 | @@ -133,7 +133,7 @@ static int snd_compr_open(struct inode *inode, struct file *f) |
977 | kfree(data); |
978 | } |
979 | snd_card_unref(compr->card); |
980 | - return 0; |
981 | + return ret; |
982 | } |
983 | |
984 | static int snd_compr_free(struct inode *inode, struct file *f) |
985 | diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c |
986 | index 819c90fe021f..4fdcc1cefc25 100644 |
987 | --- a/sound/soc/codecs/max98090.c |
988 | +++ b/sound/soc/codecs/max98090.c |
989 | @@ -336,6 +336,7 @@ static bool max98090_readable_register(struct device *dev, unsigned int reg) |
990 | case M98090_REG_RECORD_TDM_SLOT: |
991 | case M98090_REG_SAMPLE_RATE: |
992 | case M98090_REG_DMIC34_BIQUAD_BASE ... M98090_REG_DMIC34_BIQUAD_BASE + 0x0E: |
993 | + case M98090_REG_REVISION_ID: |
994 | return true; |
995 | default: |
996 | return false; |