Magellan Linux

Contents of /trunk/kernel-magellan/patches-4.13/0109-4.13.10-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3018 - (show annotations) (download)
Mon Nov 6 09:39:46 2017 UTC (6 years, 6 months ago) by niro
File size: 130011 byte(s)
-linux-4.13.10
1 diff --git a/Makefile b/Makefile
2 index aa0267950444..0e30a0d282e8 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,6 +1,6 @@
6 VERSION = 4
7 PATCHLEVEL = 13
8 -SUBLEVEL = 9
9 +SUBLEVEL = 10
10 EXTRAVERSION =
11 NAME = Fearless Coyote
12
13 diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi
14 index aebc3f9dc7b6..fa1bbdca1710 100644
15 --- a/arch/arm/boot/dts/sun6i-a31.dtsi
16 +++ b/arch/arm/boot/dts/sun6i-a31.dtsi
17 @@ -311,8 +311,8 @@
18 #size-cells = <0>;
19 reg = <0>;
20
21 - tcon1_in_drc1: endpoint@0 {
22 - reg = <0>;
23 + tcon1_in_drc1: endpoint@1 {
24 + reg = <1>;
25 remote-endpoint = <&drc1_out_tcon1>;
26 };
27 };
28 @@ -1012,8 +1012,8 @@
29 #size-cells = <0>;
30 reg = <1>;
31
32 - be1_out_drc1: endpoint@0 {
33 - reg = <0>;
34 + be1_out_drc1: endpoint@1 {
35 + reg = <1>;
36 remote-endpoint = <&drc1_in_be1>;
37 };
38 };
39 @@ -1042,8 +1042,8 @@
40 #size-cells = <0>;
41 reg = <0>;
42
43 - drc1_in_be1: endpoint@0 {
44 - reg = <0>;
45 + drc1_in_be1: endpoint@1 {
46 + reg = <1>;
47 remote-endpoint = <&be1_out_drc1>;
48 };
49 };
50 @@ -1053,8 +1053,8 @@
51 #size-cells = <0>;
52 reg = <1>;
53
54 - drc1_out_tcon1: endpoint@0 {
55 - reg = <0>;
56 + drc1_out_tcon1: endpoint@1 {
57 + reg = <1>;
58 remote-endpoint = <&tcon1_in_drc1>;
59 };
60 };
61 diff --git a/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts b/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts
62 index ba1d9810ad1e..c27242a7d5e7 100644
63 --- a/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts
64 +++ b/arch/arm64/boot/dts/rockchip/rk3399-firefly.dts
65 @@ -370,10 +370,10 @@
66 regulator-always-on;
67 regulator-boot-on;
68 regulator-min-microvolt = <1800000>;
69 - regulator-max-microvolt = <3300000>;
70 + regulator-max-microvolt = <3000000>;
71 regulator-state-mem {
72 regulator-on-in-suspend;
73 - regulator-suspend-microvolt = <3300000>;
74 + regulator-suspend-microvolt = <3000000>;
75 };
76 };
77
78 diff --git a/arch/parisc/kernel/syscall.S b/arch/parisc/kernel/syscall.S
79 index 23de307c3052..41e60a9c7db2 100644
80 --- a/arch/parisc/kernel/syscall.S
81 +++ b/arch/parisc/kernel/syscall.S
82 @@ -742,7 +742,7 @@ lws_compare_and_swap_2:
83 10: ldd 0(%r25), %r25
84 11: ldd 0(%r24), %r24
85 #else
86 - /* Load new value into r22/r23 - high/low */
87 + /* Load old value into r22/r23 - high/low */
88 10: ldw 0(%r25), %r22
89 11: ldw 4(%r25), %r23
90 /* Load new value into fr4 for atomic store later */
91 @@ -834,11 +834,11 @@ cas2_action:
92 copy %r0, %r28
93 #else
94 /* Compare first word */
95 -19: ldw,ma 0(%r26), %r29
96 +19: ldw 0(%r26), %r29
97 sub,= %r29, %r22, %r0
98 b,n cas2_end
99 /* Compare second word */
100 -20: ldw,ma 4(%r26), %r29
101 +20: ldw 4(%r26), %r29
102 sub,= %r29, %r23, %r0
103 b,n cas2_end
104 /* Perform the store */
105 diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c
106 index 2d956aa0a38a..8c0105a49839 100644
107 --- a/arch/parisc/kernel/time.c
108 +++ b/arch/parisc/kernel/time.c
109 @@ -253,7 +253,10 @@ static int __init init_cr16_clocksource(void)
110 cpu0_loc = per_cpu(cpu_data, 0).cpu_loc;
111
112 for_each_online_cpu(cpu) {
113 - if (cpu0_loc == per_cpu(cpu_data, cpu).cpu_loc)
114 + if (cpu == 0)
115 + continue;
116 + if ((cpu0_loc != 0) &&
117 + (cpu0_loc == per_cpu(cpu_data, cpu).cpu_loc))
118 continue;
119
120 clocksource_cr16.name = "cr16_unstable";
121 diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
122 index 1020a11a24e5..03895b6db719 100644
123 --- a/arch/s390/kernel/smp.c
124 +++ b/arch/s390/kernel/smp.c
125 @@ -293,7 +293,10 @@ static void pcpu_attach_task(struct pcpu *pcpu, struct task_struct *tsk)
126 lc->lpp = LPP_MAGIC;
127 lc->current_pid = tsk->pid;
128 lc->user_timer = tsk->thread.user_timer;
129 + lc->guest_timer = tsk->thread.guest_timer;
130 lc->system_timer = tsk->thread.system_timer;
131 + lc->hardirq_timer = tsk->thread.hardirq_timer;
132 + lc->softirq_timer = tsk->thread.softirq_timer;
133 lc->steal_timer = 0;
134 }
135
136 diff --git a/arch/x86/kernel/cpu/microcode/intel.c b/arch/x86/kernel/cpu/microcode/intel.c
137 index 59edbe9d4ccb..636a5fcfdeb7 100644
138 --- a/arch/x86/kernel/cpu/microcode/intel.c
139 +++ b/arch/x86/kernel/cpu/microcode/intel.c
140 @@ -34,6 +34,7 @@
141 #include <linux/mm.h>
142
143 #include <asm/microcode_intel.h>
144 +#include <asm/intel-family.h>
145 #include <asm/processor.h>
146 #include <asm/tlbflush.h>
147 #include <asm/setup.h>
148 @@ -917,6 +918,18 @@ static int get_ucode_fw(void *to, const void *from, size_t n)
149 return 0;
150 }
151
152 +static bool is_blacklisted(unsigned int cpu)
153 +{
154 + struct cpuinfo_x86 *c = &cpu_data(cpu);
155 +
156 + if (c->x86 == 6 && c->x86_model == INTEL_FAM6_BROADWELL_X) {
157 + pr_err_once("late loading on model 79 is disabled.\n");
158 + return true;
159 + }
160 +
161 + return false;
162 +}
163 +
164 static enum ucode_state request_microcode_fw(int cpu, struct device *device,
165 bool refresh_fw)
166 {
167 @@ -925,6 +938,9 @@ static enum ucode_state request_microcode_fw(int cpu, struct device *device,
168 const struct firmware *firmware;
169 enum ucode_state ret;
170
171 + if (is_blacklisted(cpu))
172 + return UCODE_NFOUND;
173 +
174 sprintf(name, "intel-ucode/%02x-%02x-%02x",
175 c->x86, c->x86_model, c->x86_mask);
176
177 @@ -949,6 +965,9 @@ static int get_ucode_user(void *to, const void *from, size_t n)
178 static enum ucode_state
179 request_microcode_user(int cpu, const void __user *buf, size_t size)
180 {
181 + if (is_blacklisted(cpu))
182 + return UCODE_NFOUND;
183 +
184 return generic_load_microcode(cpu, (void *)buf, size, &get_ucode_user);
185 }
186
187 diff --git a/crypto/asymmetric_keys/pkcs7_parser.c b/crypto/asymmetric_keys/pkcs7_parser.c
188 index af4cd8649117..d140d8bb2c96 100644
189 --- a/crypto/asymmetric_keys/pkcs7_parser.c
190 +++ b/crypto/asymmetric_keys/pkcs7_parser.c
191 @@ -88,6 +88,9 @@ static int pkcs7_check_authattrs(struct pkcs7_message *msg)
192 bool want = false;
193
194 sinfo = msg->signed_infos;
195 + if (!sinfo)
196 + goto inconsistent;
197 +
198 if (sinfo->authattrs) {
199 want = true;
200 msg->have_authattrs = true;
201 diff --git a/drivers/block/nbd.c b/drivers/block/nbd.c
202 index 5bdf923294a5..da7043893249 100644
203 --- a/drivers/block/nbd.c
204 +++ b/drivers/block/nbd.c
205 @@ -243,7 +243,6 @@ static void nbd_size_set(struct nbd_device *nbd, loff_t blocksize,
206 struct nbd_config *config = nbd->config;
207 config->blksize = blocksize;
208 config->bytesize = blocksize * nr_blocks;
209 - nbd_size_update(nbd);
210 }
211
212 static void nbd_complete_rq(struct request *req)
213 @@ -1090,6 +1089,7 @@ static int nbd_start_device(struct nbd_device *nbd)
214 args->index = i;
215 queue_work(recv_workqueue, &args->work);
216 }
217 + nbd_size_update(nbd);
218 return error;
219 }
220
221 diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c
222 index c7f396903184..70db4d5638a6 100644
223 --- a/drivers/bus/mvebu-mbus.c
224 +++ b/drivers/bus/mvebu-mbus.c
225 @@ -720,7 +720,7 @@ mvebu_mbus_default_setup_cpu_target(struct mvebu_mbus_state *mbus)
226 if (mbus->hw_io_coherency)
227 w->mbus_attr |= ATTR_HW_COHERENCY;
228 w->base = base & DDR_BASE_CS_LOW_MASK;
229 - w->size = (size | ~DDR_SIZE_MASK) + 1;
230 + w->size = (u64)(size | ~DDR_SIZE_MASK) + 1;
231 }
232 }
233 mvebu_mbus_dram_info.num_cs = cs;
234 diff --git a/drivers/clocksource/cs5535-clockevt.c b/drivers/clocksource/cs5535-clockevt.c
235 index a1df588343f2..1de8cac99a0e 100644
236 --- a/drivers/clocksource/cs5535-clockevt.c
237 +++ b/drivers/clocksource/cs5535-clockevt.c
238 @@ -117,7 +117,8 @@ static irqreturn_t mfgpt_tick(int irq, void *dev_id)
239 /* Turn off the clock (and clear the event) */
240 disable_timer(cs5535_event_clock);
241
242 - if (clockevent_state_shutdown(&cs5535_clockevent))
243 + if (clockevent_state_detached(&cs5535_clockevent) ||
244 + clockevent_state_shutdown(&cs5535_clockevent))
245 return IRQ_HANDLED;
246
247 /* Clear the counter */
248 diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
249 index d3b3252a8742..384bf4695e99 100644
250 --- a/drivers/gpu/drm/i915/intel_ddi.c
251 +++ b/drivers/gpu/drm/i915/intel_ddi.c
252 @@ -664,8 +664,8 @@ intel_ddi_get_buf_trans_fdi(struct drm_i915_private *dev_priv,
253 int *n_entries)
254 {
255 if (IS_BROADWELL(dev_priv)) {
256 - *n_entries = ARRAY_SIZE(hsw_ddi_translations_fdi);
257 - return hsw_ddi_translations_fdi;
258 + *n_entries = ARRAY_SIZE(bdw_ddi_translations_fdi);
259 + return bdw_ddi_translations_fdi;
260 } else if (IS_HASWELL(dev_priv)) {
261 *n_entries = ARRAY_SIZE(hsw_ddi_translations_fdi);
262 return hsw_ddi_translations_fdi;
263 diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c
264 index 3d35ea3e95db..92ff3e4ca013 100644
265 --- a/drivers/gpu/drm/nouveau/nv50_display.c
266 +++ b/drivers/gpu/drm/nouveau/nv50_display.c
267 @@ -3281,11 +3281,14 @@ nv50_mstm = {
268 void
269 nv50_mstm_service(struct nv50_mstm *mstm)
270 {
271 - struct drm_dp_aux *aux = mstm->mgr.aux;
272 + struct drm_dp_aux *aux = mstm ? mstm->mgr.aux : NULL;
273 bool handled = true;
274 int ret;
275 u8 esi[8] = {};
276
277 + if (!aux)
278 + return;
279 +
280 while (handled) {
281 ret = drm_dp_dpcd_read(aux, DP_SINK_COUNT_ESI, esi, 8);
282 if (ret != 8) {
283 diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.c b/drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.c
284 index 8e2e24a74774..44e116f7880d 100644
285 --- a/drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.c
286 +++ b/drivers/gpu/drm/nouveau/nvkm/engine/bsp/g84.c
287 @@ -39,5 +39,5 @@ int
288 g84_bsp_new(struct nvkm_device *device, int index, struct nvkm_engine **pengine)
289 {
290 return nvkm_xtensa_new_(&g84_bsp, device, index,
291 - true, 0x103000, pengine);
292 + device->chipset != 0x92, 0x103000, pengine);
293 }
294 diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c
295 index d06ad2c372bf..455da298227f 100644
296 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c
297 +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/mmu/base.c
298 @@ -241,6 +241,8 @@ nvkm_vm_unmap_pgt(struct nvkm_vm *vm, int big, u32 fpde, u32 lpde)
299 mmu->func->map_pgt(vpgd->obj, pde, vpgt->mem);
300 }
301
302 + mmu->func->flush(vm);
303 +
304 nvkm_memory_del(&pgt);
305 }
306 }
307 diff --git a/drivers/i2c/busses/i2c-ismt.c b/drivers/i2c/busses/i2c-ismt.c
308 index 22ffcb73c185..b51adffa4841 100644
309 --- a/drivers/i2c/busses/i2c-ismt.c
310 +++ b/drivers/i2c/busses/i2c-ismt.c
311 @@ -340,12 +340,15 @@ static int ismt_process_desc(const struct ismt_desc *desc,
312 data->word = dma_buffer[0] | (dma_buffer[1] << 8);
313 break;
314 case I2C_SMBUS_BLOCK_DATA:
315 - case I2C_SMBUS_I2C_BLOCK_DATA:
316 if (desc->rxbytes != dma_buffer[0] + 1)
317 return -EMSGSIZE;
318
319 memcpy(data->block, dma_buffer, desc->rxbytes);
320 break;
321 + case I2C_SMBUS_I2C_BLOCK_DATA:
322 + memcpy(&data->block[1], dma_buffer, desc->rxbytes);
323 + data->block[0] = desc->rxbytes;
324 + break;
325 }
326 return 0;
327 }
328 diff --git a/drivers/i2c/busses/i2c-piix4.c b/drivers/i2c/busses/i2c-piix4.c
329 index 0ecdb47a23ab..01f767ee4546 100644
330 --- a/drivers/i2c/busses/i2c-piix4.c
331 +++ b/drivers/i2c/busses/i2c-piix4.c
332 @@ -94,6 +94,12 @@
333 #define SB800_PIIX4_PORT_IDX_ALT 0x2e
334 #define SB800_PIIX4_PORT_IDX_SEL 0x2f
335 #define SB800_PIIX4_PORT_IDX_MASK 0x06
336 +#define SB800_PIIX4_PORT_IDX_SHIFT 1
337 +
338 +/* On kerncz, SmBus0Sel is at bit 20:19 of PMx00 DecodeEn */
339 +#define SB800_PIIX4_PORT_IDX_KERNCZ 0x02
340 +#define SB800_PIIX4_PORT_IDX_MASK_KERNCZ 0x18
341 +#define SB800_PIIX4_PORT_IDX_SHIFT_KERNCZ 3
342
343 /* insmod parameters */
344
345 @@ -149,6 +155,8 @@ static const struct dmi_system_id piix4_dmi_ibm[] = {
346 */
347 static DEFINE_MUTEX(piix4_mutex_sb800);
348 static u8 piix4_port_sel_sb800;
349 +static u8 piix4_port_mask_sb800;
350 +static u8 piix4_port_shift_sb800;
351 static const char *piix4_main_port_names_sb800[PIIX4_MAX_ADAPTERS] = {
352 " port 0", " port 2", " port 3", " port 4"
353 };
354 @@ -347,7 +355,19 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
355
356 /* Find which register is used for port selection */
357 if (PIIX4_dev->vendor == PCI_VENDOR_ID_AMD) {
358 - piix4_port_sel_sb800 = SB800_PIIX4_PORT_IDX_ALT;
359 + switch (PIIX4_dev->device) {
360 + case PCI_DEVICE_ID_AMD_KERNCZ_SMBUS:
361 + piix4_port_sel_sb800 = SB800_PIIX4_PORT_IDX_KERNCZ;
362 + piix4_port_mask_sb800 = SB800_PIIX4_PORT_IDX_MASK_KERNCZ;
363 + piix4_port_shift_sb800 = SB800_PIIX4_PORT_IDX_SHIFT_KERNCZ;
364 + break;
365 + case PCI_DEVICE_ID_AMD_HUDSON2_SMBUS:
366 + default:
367 + piix4_port_sel_sb800 = SB800_PIIX4_PORT_IDX_ALT;
368 + piix4_port_mask_sb800 = SB800_PIIX4_PORT_IDX_MASK;
369 + piix4_port_shift_sb800 = SB800_PIIX4_PORT_IDX_SHIFT;
370 + break;
371 + }
372 } else {
373 mutex_lock(&piix4_mutex_sb800);
374 outb_p(SB800_PIIX4_PORT_IDX_SEL, SB800_PIIX4_SMB_IDX);
375 @@ -355,6 +375,8 @@ static int piix4_setup_sb800(struct pci_dev *PIIX4_dev,
376 piix4_port_sel_sb800 = (port_sel & 0x01) ?
377 SB800_PIIX4_PORT_IDX_ALT :
378 SB800_PIIX4_PORT_IDX;
379 + piix4_port_mask_sb800 = SB800_PIIX4_PORT_IDX_MASK;
380 + piix4_port_shift_sb800 = SB800_PIIX4_PORT_IDX_SHIFT;
381 mutex_unlock(&piix4_mutex_sb800);
382 }
383
384 @@ -616,8 +638,8 @@ static s32 piix4_access_sb800(struct i2c_adapter *adap, u16 addr,
385 smba_en_lo = inb_p(SB800_PIIX4_SMB_IDX + 1);
386
387 port = adapdata->port;
388 - if ((smba_en_lo & SB800_PIIX4_PORT_IDX_MASK) != port)
389 - outb_p((smba_en_lo & ~SB800_PIIX4_PORT_IDX_MASK) | port,
390 + if ((smba_en_lo & piix4_port_mask_sb800) != port)
391 + outb_p((smba_en_lo & ~piix4_port_mask_sb800) | port,
392 SB800_PIIX4_SMB_IDX + 1);
393
394 retval = piix4_access(adap, addr, flags, read_write,
395 @@ -706,7 +728,7 @@ static int piix4_add_adapter(struct pci_dev *dev, unsigned short smba,
396
397 adapdata->smba = smba;
398 adapdata->sb800_main = sb800_main;
399 - adapdata->port = port << 1;
400 + adapdata->port = port << piix4_port_shift_sb800;
401
402 /* set up the sysfs linkage to our parent device */
403 adap->dev.parent = &dev->dev;
404 diff --git a/drivers/iio/dummy/iio_simple_dummy_events.c b/drivers/iio/dummy/iio_simple_dummy_events.c
405 index ed63ffd849f8..7ec2a0bb0807 100644
406 --- a/drivers/iio/dummy/iio_simple_dummy_events.c
407 +++ b/drivers/iio/dummy/iio_simple_dummy_events.c
408 @@ -72,6 +72,7 @@ int iio_simple_dummy_write_event_config(struct iio_dev *indio_dev,
409 st->event_en = state;
410 else
411 return -EINVAL;
412 + break;
413 default:
414 return -EINVAL;
415 }
416 diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen/stmfts.c
417 index 157fdb4bb2e8..8c6c6178ec12 100644
418 --- a/drivers/input/touchscreen/stmfts.c
419 +++ b/drivers/input/touchscreen/stmfts.c
420 @@ -663,12 +663,10 @@ static int stmfts_probe(struct i2c_client *client,
421 sdata->input->open = stmfts_input_open;
422 sdata->input->close = stmfts_input_close;
423
424 + input_set_capability(sdata->input, EV_ABS, ABS_MT_POSITION_X);
425 + input_set_capability(sdata->input, EV_ABS, ABS_MT_POSITION_Y);
426 touchscreen_parse_properties(sdata->input, true, &sdata->prop);
427
428 - input_set_abs_params(sdata->input, ABS_MT_POSITION_X, 0,
429 - sdata->prop.max_x, 0, 0);
430 - input_set_abs_params(sdata->input, ABS_MT_POSITION_Y, 0,
431 - sdata->prop.max_y, 0, 0);
432 input_set_abs_params(sdata->input, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0);
433 input_set_abs_params(sdata->input, ABS_MT_TOUCH_MINOR, 0, 255, 0, 0);
434 input_set_abs_params(sdata->input, ABS_MT_ORIENTATION, 0, 255, 0, 0);
435 diff --git a/drivers/media/cec/cec-adap.c b/drivers/media/cec/cec-adap.c
436 index d596b601ff42..8cfc5e84a129 100644
437 --- a/drivers/media/cec/cec-adap.c
438 +++ b/drivers/media/cec/cec-adap.c
439 @@ -1726,12 +1726,19 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
440 */
441 switch (msg->msg[1]) {
442 case CEC_MSG_GET_CEC_VERSION:
443 - case CEC_MSG_GIVE_DEVICE_VENDOR_ID:
444 case CEC_MSG_ABORT:
445 case CEC_MSG_GIVE_DEVICE_POWER_STATUS:
446 - case CEC_MSG_GIVE_PHYSICAL_ADDR:
447 case CEC_MSG_GIVE_OSD_NAME:
448 + /*
449 + * These messages reply with a directed message, so ignore if
450 + * the initiator is Unregistered.
451 + */
452 + if (!adap->passthrough && from_unregistered)
453 + return 0;
454 + /* Fall through */
455 + case CEC_MSG_GIVE_DEVICE_VENDOR_ID:
456 case CEC_MSG_GIVE_FEATURES:
457 + case CEC_MSG_GIVE_PHYSICAL_ADDR:
458 /*
459 * Skip processing these messages if the passthrough mode
460 * is on.
461 @@ -1739,7 +1746,7 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
462 if (adap->passthrough)
463 goto skip_processing;
464 /* Ignore if addressing is wrong */
465 - if (is_broadcast || from_unregistered)
466 + if (is_broadcast)
467 return 0;
468 break;
469
470 diff --git a/drivers/media/dvb-frontends/dib3000mc.c b/drivers/media/dvb-frontends/dib3000mc.c
471 index 224283fe100a..4d086a7248e9 100644
472 --- a/drivers/media/dvb-frontends/dib3000mc.c
473 +++ b/drivers/media/dvb-frontends/dib3000mc.c
474 @@ -55,29 +55,57 @@ struct dib3000mc_state {
475
476 static u16 dib3000mc_read_word(struct dib3000mc_state *state, u16 reg)
477 {
478 - u8 wb[2] = { (reg >> 8) | 0x80, reg & 0xff };
479 - u8 rb[2];
480 struct i2c_msg msg[2] = {
481 - { .addr = state->i2c_addr >> 1, .flags = 0, .buf = wb, .len = 2 },
482 - { .addr = state->i2c_addr >> 1, .flags = I2C_M_RD, .buf = rb, .len = 2 },
483 + { .addr = state->i2c_addr >> 1, .flags = 0, .len = 2 },
484 + { .addr = state->i2c_addr >> 1, .flags = I2C_M_RD, .len = 2 },
485 };
486 + u16 word;
487 + u8 *b;
488 +
489 + b = kmalloc(4, GFP_KERNEL);
490 + if (!b)
491 + return 0;
492 +
493 + b[0] = (reg >> 8) | 0x80;
494 + b[1] = reg;
495 + b[2] = 0;
496 + b[3] = 0;
497 +
498 + msg[0].buf = b;
499 + msg[1].buf = b + 2;
500
501 if (i2c_transfer(state->i2c_adap, msg, 2) != 2)
502 dprintk("i2c read error on %d\n",reg);
503
504 - return (rb[0] << 8) | rb[1];
505 + word = (b[2] << 8) | b[3];
506 + kfree(b);
507 +
508 + return word;
509 }
510
511 static int dib3000mc_write_word(struct dib3000mc_state *state, u16 reg, u16 val)
512 {
513 - u8 b[4] = {
514 - (reg >> 8) & 0xff, reg & 0xff,
515 - (val >> 8) & 0xff, val & 0xff,
516 - };
517 struct i2c_msg msg = {
518 - .addr = state->i2c_addr >> 1, .flags = 0, .buf = b, .len = 4
519 + .addr = state->i2c_addr >> 1, .flags = 0, .len = 4
520 };
521 - return i2c_transfer(state->i2c_adap, &msg, 1) != 1 ? -EREMOTEIO : 0;
522 + int rc;
523 + u8 *b;
524 +
525 + b = kmalloc(4, GFP_KERNEL);
526 + if (!b)
527 + return -ENOMEM;
528 +
529 + b[0] = reg >> 8;
530 + b[1] = reg;
531 + b[2] = val >> 8;
532 + b[3] = val;
533 +
534 + msg.buf = b;
535 +
536 + rc = i2c_transfer(state->i2c_adap, &msg, 1) != 1 ? -EREMOTEIO : 0;
537 + kfree(b);
538 +
539 + return rc;
540 }
541
542 static int dib3000mc_identify(struct dib3000mc_state *state)
543 diff --git a/drivers/media/dvb-frontends/dvb-pll.c b/drivers/media/dvb-frontends/dvb-pll.c
544 index 7bec3e028bee..5553b89b804e 100644
545 --- a/drivers/media/dvb-frontends/dvb-pll.c
546 +++ b/drivers/media/dvb-frontends/dvb-pll.c
547 @@ -753,13 +753,19 @@ struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr,
548 struct i2c_adapter *i2c,
549 unsigned int pll_desc_id)
550 {
551 - u8 b1 [] = { 0 };
552 - struct i2c_msg msg = { .addr = pll_addr, .flags = I2C_M_RD,
553 - .buf = b1, .len = 1 };
554 + u8 *b1;
555 + struct i2c_msg msg = { .addr = pll_addr, .flags = I2C_M_RD, .len = 1 };
556 struct dvb_pll_priv *priv = NULL;
557 int ret;
558 const struct dvb_pll_desc *desc;
559
560 + b1 = kmalloc(1, GFP_KERNEL);
561 + if (!b1)
562 + return NULL;
563 +
564 + b1[0] = 0;
565 + msg.buf = b1;
566 +
567 if ((id[dvb_pll_devcount] > DVB_PLL_UNDEFINED) &&
568 (id[dvb_pll_devcount] < ARRAY_SIZE(pll_list)))
569 pll_desc_id = id[dvb_pll_devcount];
570 @@ -773,15 +779,19 @@ struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr,
571 fe->ops.i2c_gate_ctrl(fe, 1);
572
573 ret = i2c_transfer (i2c, &msg, 1);
574 - if (ret != 1)
575 + if (ret != 1) {
576 + kfree(b1);
577 return NULL;
578 + }
579 if (fe->ops.i2c_gate_ctrl)
580 fe->ops.i2c_gate_ctrl(fe, 0);
581 }
582
583 priv = kzalloc(sizeof(struct dvb_pll_priv), GFP_KERNEL);
584 - if (priv == NULL)
585 + if (!priv) {
586 + kfree(b1);
587 return NULL;
588 + }
589
590 priv->pll_i2c_address = pll_addr;
591 priv->i2c = i2c;
592 @@ -811,6 +821,8 @@ struct dvb_frontend *dvb_pll_attach(struct dvb_frontend *fe, int pll_addr,
593 "insmod option" : "autodetected");
594 }
595
596 + kfree(b1);
597 +
598 return fe;
599 }
600 EXPORT_SYMBOL(dvb_pll_attach);
601 diff --git a/drivers/media/platform/s5p-cec/exynos_hdmi_cecctrl.c b/drivers/media/platform/s5p-cec/exynos_hdmi_cecctrl.c
602 index 1edf667d562a..146ae6f25cdb 100644
603 --- a/drivers/media/platform/s5p-cec/exynos_hdmi_cecctrl.c
604 +++ b/drivers/media/platform/s5p-cec/exynos_hdmi_cecctrl.c
605 @@ -172,7 +172,8 @@ u32 s5p_cec_get_status(struct s5p_cec_dev *cec)
606 {
607 u32 status = 0;
608
609 - status = readb(cec->reg + S5P_CEC_STATUS_0);
610 + status = readb(cec->reg + S5P_CEC_STATUS_0) & 0xf;
611 + status |= (readb(cec->reg + S5P_CEC_TX_STAT1) & 0xf) << 4;
612 status |= readb(cec->reg + S5P_CEC_STATUS_1) << 8;
613 status |= readb(cec->reg + S5P_CEC_STATUS_2) << 16;
614 status |= readb(cec->reg + S5P_CEC_STATUS_3) << 24;
615 diff --git a/drivers/media/platform/s5p-cec/s5p_cec.c b/drivers/media/platform/s5p-cec/s5p_cec.c
616 index 8e06071a7977..7d8d67e5448f 100644
617 --- a/drivers/media/platform/s5p-cec/s5p_cec.c
618 +++ b/drivers/media/platform/s5p-cec/s5p_cec.c
619 @@ -92,7 +92,10 @@ static irqreturn_t s5p_cec_irq_handler(int irq, void *priv)
620 dev_dbg(cec->dev, "irq received\n");
621
622 if (status & CEC_STATUS_TX_DONE) {
623 - if (status & CEC_STATUS_TX_ERROR) {
624 + if (status & CEC_STATUS_TX_NACK) {
625 + dev_dbg(cec->dev, "CEC_STATUS_TX_NACK set\n");
626 + cec->tx = STATE_NACK;
627 + } else if (status & CEC_STATUS_TX_ERROR) {
628 dev_dbg(cec->dev, "CEC_STATUS_TX_ERROR set\n");
629 cec->tx = STATE_ERROR;
630 } else {
631 @@ -135,6 +138,12 @@ static irqreturn_t s5p_cec_irq_handler_thread(int irq, void *priv)
632 cec_transmit_done(cec->adap, CEC_TX_STATUS_OK, 0, 0, 0, 0);
633 cec->tx = STATE_IDLE;
634 break;
635 + case STATE_NACK:
636 + cec_transmit_done(cec->adap,
637 + CEC_TX_STATUS_MAX_RETRIES | CEC_TX_STATUS_NACK,
638 + 0, 1, 0, 0);
639 + cec->tx = STATE_IDLE;
640 + break;
641 case STATE_ERROR:
642 cec_transmit_done(cec->adap,
643 CEC_TX_STATUS_MAX_RETRIES | CEC_TX_STATUS_ERROR,
644 diff --git a/drivers/media/platform/s5p-cec/s5p_cec.h b/drivers/media/platform/s5p-cec/s5p_cec.h
645 index 8bcd8dc1aeb9..86ded522ef27 100644
646 --- a/drivers/media/platform/s5p-cec/s5p_cec.h
647 +++ b/drivers/media/platform/s5p-cec/s5p_cec.h
648 @@ -35,6 +35,7 @@
649 #define CEC_STATUS_TX_TRANSFERRING (1 << 1)
650 #define CEC_STATUS_TX_DONE (1 << 2)
651 #define CEC_STATUS_TX_ERROR (1 << 3)
652 +#define CEC_STATUS_TX_NACK (1 << 4)
653 #define CEC_STATUS_TX_BYTES (0xFF << 8)
654 #define CEC_STATUS_RX_RUNNING (1 << 16)
655 #define CEC_STATUS_RX_RECEIVING (1 << 17)
656 @@ -55,6 +56,7 @@ enum cec_state {
657 STATE_IDLE,
658 STATE_BUSY,
659 STATE_DONE,
660 + STATE_NACK,
661 STATE_ERROR
662 };
663
664 diff --git a/drivers/media/tuners/mt2060.c b/drivers/media/tuners/mt2060.c
665 index 2e487f9a2cc3..4983eeb39f36 100644
666 --- a/drivers/media/tuners/mt2060.c
667 +++ b/drivers/media/tuners/mt2060.c
668 @@ -38,41 +38,74 @@ MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
669 static int mt2060_readreg(struct mt2060_priv *priv, u8 reg, u8 *val)
670 {
671 struct i2c_msg msg[2] = {
672 - { .addr = priv->cfg->i2c_address, .flags = 0, .buf = &reg, .len = 1 },
673 - { .addr = priv->cfg->i2c_address, .flags = I2C_M_RD, .buf = val, .len = 1 },
674 + { .addr = priv->cfg->i2c_address, .flags = 0, .len = 1 },
675 + { .addr = priv->cfg->i2c_address, .flags = I2C_M_RD, .len = 1 },
676 };
677 + int rc = 0;
678 + u8 *b;
679 +
680 + b = kmalloc(2, GFP_KERNEL);
681 + if (!b)
682 + return -ENOMEM;
683 +
684 + b[0] = reg;
685 + b[1] = 0;
686 +
687 + msg[0].buf = b;
688 + msg[1].buf = b + 1;
689
690 if (i2c_transfer(priv->i2c, msg, 2) != 2) {
691 printk(KERN_WARNING "mt2060 I2C read failed\n");
692 - return -EREMOTEIO;
693 + rc = -EREMOTEIO;
694 }
695 - return 0;
696 + *val = b[1];
697 + kfree(b);
698 +
699 + return rc;
700 }
701
702 // Writes a single register
703 static int mt2060_writereg(struct mt2060_priv *priv, u8 reg, u8 val)
704 {
705 - u8 buf[2] = { reg, val };
706 struct i2c_msg msg = {
707 - .addr = priv->cfg->i2c_address, .flags = 0, .buf = buf, .len = 2
708 + .addr = priv->cfg->i2c_address, .flags = 0, .len = 2
709 };
710 + u8 *buf;
711 + int rc = 0;
712 +
713 + buf = kmalloc(2, GFP_KERNEL);
714 + if (!buf)
715 + return -ENOMEM;
716 +
717 + buf[0] = reg;
718 + buf[1] = val;
719 +
720 + msg.buf = buf;
721
722 if (i2c_transfer(priv->i2c, &msg, 1) != 1) {
723 printk(KERN_WARNING "mt2060 I2C write failed\n");
724 - return -EREMOTEIO;
725 + rc = -EREMOTEIO;
726 }
727 - return 0;
728 + kfree(buf);
729 + return rc;
730 }
731
732 // Writes a set of consecutive registers
733 static int mt2060_writeregs(struct mt2060_priv *priv,u8 *buf, u8 len)
734 {
735 int rem, val_len;
736 - u8 xfer_buf[16];
737 + u8 *xfer_buf;
738 + int rc = 0;
739 struct i2c_msg msg = {
740 - .addr = priv->cfg->i2c_address, .flags = 0, .buf = xfer_buf
741 + .addr = priv->cfg->i2c_address, .flags = 0
742 };
743
744 + xfer_buf = kmalloc(16, GFP_KERNEL);
745 + if (!xfer_buf)
746 + return -ENOMEM;
747 +
748 + msg.buf = xfer_buf;
749 +
750 for (rem = len - 1; rem > 0; rem -= priv->i2c_max_regs) {
751 val_len = min_t(int, rem, priv->i2c_max_regs);
752 msg.len = 1 + val_len;
753 @@ -81,11 +114,13 @@ static int mt2060_writeregs(struct mt2060_priv *priv,u8 *buf, u8 len)
754
755 if (i2c_transfer(priv->i2c, &msg, 1) != 1) {
756 printk(KERN_WARNING "mt2060 I2C write failed (len=%i)\n", val_len);
757 - return -EREMOTEIO;
758 + rc = -EREMOTEIO;
759 + break;
760 }
761 }
762
763 - return 0;
764 + kfree(xfer_buf);
765 + return rc;
766 }
767
768 // Initialisation sequences
769 diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c
770 index ba8a0f58fe08..b2d0ee0be8c3 100644
771 --- a/drivers/mmc/host/sdhci-pci-core.c
772 +++ b/drivers/mmc/host/sdhci-pci-core.c
773 @@ -449,6 +449,8 @@ static void intel_dsm_init(struct intel_host *intel_host, struct device *dev,
774 int err;
775 u32 val;
776
777 + intel_host->d3_retune = true;
778 +
779 err = __intel_dsm(intel_host, dev, INTEL_DSM_FNS, &intel_host->dsm_fns);
780 if (err) {
781 pr_debug("%s: DSM not supported, error %d\n",
782 diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
783 index 13f0f219d8aa..a13a4896a8bd 100644
784 --- a/drivers/net/can/flexcan.c
785 +++ b/drivers/net/can/flexcan.c
786 @@ -182,22 +182,23 @@
787 /* FLEXCAN hardware feature flags
788 *
789 * Below is some version info we got:
790 - * SOC Version IP-Version Glitch- [TR]WRN_INT Memory err RTR re-
791 - * Filter? connected? detection ception in MB
792 - * MX25 FlexCAN2 03.00.00.00 no no no no
793 - * MX28 FlexCAN2 03.00.04.00 yes yes no no
794 - * MX35 FlexCAN2 03.00.00.00 no no no no
795 - * MX53 FlexCAN2 03.00.00.00 yes no no no
796 - * MX6s FlexCAN3 10.00.12.00 yes yes no yes
797 - * VF610 FlexCAN3 ? no yes yes yes?
798 + * SOC Version IP-Version Glitch- [TR]WRN_INT IRQ Err Memory err RTR re-
799 + * Filter? connected? Passive detection ception in MB
800 + * MX25 FlexCAN2 03.00.00.00 no no ? no no
801 + * MX28 FlexCAN2 03.00.04.00 yes yes no no no
802 + * MX35 FlexCAN2 03.00.00.00 no no ? no no
803 + * MX53 FlexCAN2 03.00.00.00 yes no no no no
804 + * MX6s FlexCAN3 10.00.12.00 yes yes no no yes
805 + * VF610 FlexCAN3 ? no yes ? yes yes?
806 *
807 * Some SOCs do not have the RX_WARN & TX_WARN interrupt line connected.
808 */
809 -#define FLEXCAN_QUIRK_BROKEN_ERR_STATE BIT(1) /* [TR]WRN_INT not connected */
810 +#define FLEXCAN_QUIRK_BROKEN_WERR_STATE BIT(1) /* [TR]WRN_INT not connected */
811 #define FLEXCAN_QUIRK_DISABLE_RXFG BIT(2) /* Disable RX FIFO Global mask */
812 #define FLEXCAN_QUIRK_ENABLE_EACEN_RRS BIT(3) /* Enable EACEN and RRS bit in ctrl2 */
813 #define FLEXCAN_QUIRK_DISABLE_MECR BIT(4) /* Disable Memory error detection */
814 #define FLEXCAN_QUIRK_USE_OFF_TIMESTAMP BIT(5) /* Use timestamp based offloading */
815 +#define FLEXCAN_QUIRK_BROKEN_PERR_STATE BIT(6) /* No interrupt for error passive */
816
817 /* Structure of the message buffer */
818 struct flexcan_mb {
819 @@ -281,14 +282,17 @@ struct flexcan_priv {
820 };
821
822 static const struct flexcan_devtype_data fsl_p1010_devtype_data = {
823 - .quirks = FLEXCAN_QUIRK_BROKEN_ERR_STATE,
824 + .quirks = FLEXCAN_QUIRK_BROKEN_WERR_STATE |
825 + FLEXCAN_QUIRK_BROKEN_PERR_STATE,
826 };
827
828 -static const struct flexcan_devtype_data fsl_imx28_devtype_data;
829 +static const struct flexcan_devtype_data fsl_imx28_devtype_data = {
830 + .quirks = FLEXCAN_QUIRK_BROKEN_PERR_STATE,
831 +};
832
833 static const struct flexcan_devtype_data fsl_imx6q_devtype_data = {
834 .quirks = FLEXCAN_QUIRK_DISABLE_RXFG | FLEXCAN_QUIRK_ENABLE_EACEN_RRS |
835 - FLEXCAN_QUIRK_USE_OFF_TIMESTAMP,
836 + FLEXCAN_QUIRK_USE_OFF_TIMESTAMP | FLEXCAN_QUIRK_BROKEN_PERR_STATE,
837 };
838
839 static const struct flexcan_devtype_data fsl_vf610_devtype_data = {
840 @@ -335,6 +339,22 @@ static inline void flexcan_write(u32 val, void __iomem *addr)
841 }
842 #endif
843
844 +static inline void flexcan_error_irq_enable(const struct flexcan_priv *priv)
845 +{
846 + struct flexcan_regs __iomem *regs = priv->regs;
847 + u32 reg_ctrl = (priv->reg_ctrl_default | FLEXCAN_CTRL_ERR_MSK);
848 +
849 + flexcan_write(reg_ctrl, &regs->ctrl);
850 +}
851 +
852 +static inline void flexcan_error_irq_disable(const struct flexcan_priv *priv)
853 +{
854 + struct flexcan_regs __iomem *regs = priv->regs;
855 + u32 reg_ctrl = (priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_MSK);
856 +
857 + flexcan_write(reg_ctrl, &regs->ctrl);
858 +}
859 +
860 static inline int flexcan_transceiver_enable(const struct flexcan_priv *priv)
861 {
862 if (!priv->reg_xceiver)
863 @@ -713,6 +733,7 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id)
864 struct flexcan_regs __iomem *regs = priv->regs;
865 irqreturn_t handled = IRQ_NONE;
866 u32 reg_iflag1, reg_esr;
867 + enum can_state last_state = priv->can.state;
868
869 reg_iflag1 = flexcan_read(&regs->iflag1);
870
871 @@ -765,8 +786,10 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id)
872 flexcan_write(reg_esr & FLEXCAN_ESR_ALL_INT, &regs->esr);
873 }
874
875 - /* state change interrupt */
876 - if (reg_esr & FLEXCAN_ESR_ERR_STATE)
877 + /* state change interrupt or broken error state quirk fix is enabled */
878 + if ((reg_esr & FLEXCAN_ESR_ERR_STATE) ||
879 + (priv->devtype_data->quirks & (FLEXCAN_QUIRK_BROKEN_WERR_STATE |
880 + FLEXCAN_QUIRK_BROKEN_PERR_STATE)))
881 flexcan_irq_state(dev, reg_esr);
882
883 /* bus error IRQ - handle if bus error reporting is activated */
884 @@ -774,6 +797,44 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id)
885 (priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING))
886 flexcan_irq_bus_err(dev, reg_esr);
887
888 + /* availability of error interrupt among state transitions in case
889 + * bus error reporting is de-activated and
890 + * FLEXCAN_QUIRK_BROKEN_PERR_STATE is enabled:
891 + * +--------------------------------------------------------------+
892 + * | +----------------------------------------------+ [stopped / |
893 + * | | | sleeping] -+
894 + * +-+-> active <-> warning <-> passive -> bus off -+
895 + * ___________^^^^^^^^^^^^_______________________________
896 + * disabled(1) enabled disabled
897 + *
898 + * (1): enabled if FLEXCAN_QUIRK_BROKEN_WERR_STATE is enabled
899 + */
900 + if ((last_state != priv->can.state) &&
901 + (priv->devtype_data->quirks & FLEXCAN_QUIRK_BROKEN_PERR_STATE) &&
902 + !(priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)) {
903 + switch (priv->can.state) {
904 + case CAN_STATE_ERROR_ACTIVE:
905 + if (priv->devtype_data->quirks &
906 + FLEXCAN_QUIRK_BROKEN_WERR_STATE)
907 + flexcan_error_irq_enable(priv);
908 + else
909 + flexcan_error_irq_disable(priv);
910 + break;
911 +
912 + case CAN_STATE_ERROR_WARNING:
913 + flexcan_error_irq_enable(priv);
914 + break;
915 +
916 + case CAN_STATE_ERROR_PASSIVE:
917 + case CAN_STATE_BUS_OFF:
918 + flexcan_error_irq_disable(priv);
919 + break;
920 +
921 + default:
922 + break;
923 + }
924 + }
925 +
926 return handled;
927 }
928
929 @@ -887,7 +948,7 @@ static int flexcan_chip_start(struct net_device *dev)
930 * on most Flexcan cores, too. Otherwise we don't get
931 * any error warning or passive interrupts.
932 */
933 - if (priv->devtype_data->quirks & FLEXCAN_QUIRK_BROKEN_ERR_STATE ||
934 + if (priv->devtype_data->quirks & FLEXCAN_QUIRK_BROKEN_WERR_STATE ||
935 priv->can.ctrlmode & CAN_CTRLMODE_BERR_REPORTING)
936 reg_ctrl |= FLEXCAN_CTRL_ERR_MSK;
937 else
938 diff --git a/drivers/net/can/usb/esd_usb2.c b/drivers/net/can/usb/esd_usb2.c
939 index be928ce62d32..9fdb0f0bfa06 100644
940 --- a/drivers/net/can/usb/esd_usb2.c
941 +++ b/drivers/net/can/usb/esd_usb2.c
942 @@ -333,7 +333,7 @@ static void esd_usb2_rx_can_msg(struct esd_usb2_net_priv *priv,
943 }
944
945 cf->can_id = id & ESD_IDMASK;
946 - cf->can_dlc = get_can_dlc(msg->msg.rx.dlc);
947 + cf->can_dlc = get_can_dlc(msg->msg.rx.dlc & ~ESD_RTR);
948
949 if (id & ESD_EXTID)
950 cf->can_id |= CAN_EFF_FLAG;
951 diff --git a/drivers/net/can/usb/gs_usb.c b/drivers/net/can/usb/gs_usb.c
952 index afcc1312dbaf..68ac3e88a8ce 100644
953 --- a/drivers/net/can/usb/gs_usb.c
954 +++ b/drivers/net/can/usb/gs_usb.c
955 @@ -375,6 +375,8 @@ static void gs_usb_receive_bulk_callback(struct urb *urb)
956
957 gs_free_tx_context(txc);
958
959 + atomic_dec(&dev->active_tx_urbs);
960 +
961 netif_wake_queue(netdev);
962 }
963
964 @@ -463,14 +465,6 @@ static void gs_usb_xmit_callback(struct urb *urb)
965 urb->transfer_buffer_length,
966 urb->transfer_buffer,
967 urb->transfer_dma);
968 -
969 - atomic_dec(&dev->active_tx_urbs);
970 -
971 - if (!netif_device_present(netdev))
972 - return;
973 -
974 - if (netif_queue_stopped(netdev))
975 - netif_wake_queue(netdev);
976 }
977
978 static netdev_tx_t gs_can_start_xmit(struct sk_buff *skb,
979 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
980 index 4eb1e1ce9ace..ef72baf6dd96 100644
981 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
982 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/fweh.c
983 @@ -429,7 +429,8 @@ void brcmf_fweh_process_event(struct brcmf_pub *drvr,
984 if (code != BRCMF_E_IF && !fweh->evt_handler[code])
985 return;
986
987 - if (datalen > BRCMF_DCMD_MAXLEN)
988 + if (datalen > BRCMF_DCMD_MAXLEN ||
989 + datalen + sizeof(*event_packet) > packet_len)
990 return;
991
992 if (in_interrupt())
993 diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
994 index b3aab2fe96eb..ef685465f80a 100644
995 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
996 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/phy/phy_n.c
997 @@ -14764,8 +14764,8 @@ static void wlc_phy_ipa_restore_tx_digi_filts_nphy(struct brcms_phy *pi)
998 }
999
1000 static void
1001 -wlc_phy_set_rfseq_nphy(struct brcms_phy *pi, u8 cmd, u8 *events, u8 *dlys,
1002 - u8 len)
1003 +wlc_phy_set_rfseq_nphy(struct brcms_phy *pi, u8 cmd, const u8 *events,
1004 + const u8 *dlys, u8 len)
1005 {
1006 u32 t1_offset, t2_offset;
1007 u8 ctr;
1008 @@ -15240,16 +15240,16 @@ static void wlc_phy_workarounds_nphy_gainctrl_2057_rev5(struct brcms_phy *pi)
1009 static void wlc_phy_workarounds_nphy_gainctrl_2057_rev6(struct brcms_phy *pi)
1010 {
1011 u16 currband;
1012 - s8 lna1G_gain_db_rev7[] = { 9, 14, 19, 24 };
1013 - s8 *lna1_gain_db = NULL;
1014 - s8 *lna1_gain_db_2 = NULL;
1015 - s8 *lna2_gain_db = NULL;
1016 - s8 tiaA_gain_db_rev7[] = { -9, -6, -3, 0, 3, 3, 3, 3, 3, 3 };
1017 - s8 *tia_gain_db;
1018 - s8 tiaA_gainbits_rev7[] = { 0, 1, 2, 3, 4, 4, 4, 4, 4, 4 };
1019 - s8 *tia_gainbits;
1020 - u16 rfseqA_init_gain_rev7[] = { 0x624f, 0x624f };
1021 - u16 *rfseq_init_gain;
1022 + static const s8 lna1G_gain_db_rev7[] = { 9, 14, 19, 24 };
1023 + const s8 *lna1_gain_db = NULL;
1024 + const s8 *lna1_gain_db_2 = NULL;
1025 + const s8 *lna2_gain_db = NULL;
1026 + static const s8 tiaA_gain_db_rev7[] = { -9, -6, -3, 0, 3, 3, 3, 3, 3, 3 };
1027 + const s8 *tia_gain_db;
1028 + static const s8 tiaA_gainbits_rev7[] = { 0, 1, 2, 3, 4, 4, 4, 4, 4, 4 };
1029 + const s8 *tia_gainbits;
1030 + static const u16 rfseqA_init_gain_rev7[] = { 0x624f, 0x624f };
1031 + const u16 *rfseq_init_gain;
1032 u16 init_gaincode;
1033 u16 clip1hi_gaincode;
1034 u16 clip1md_gaincode = 0;
1035 @@ -15310,10 +15310,9 @@ static void wlc_phy_workarounds_nphy_gainctrl_2057_rev6(struct brcms_phy *pi)
1036
1037 if ((freq <= 5080) || (freq == 5825)) {
1038
1039 - s8 lna1A_gain_db_rev7[] = { 11, 16, 20, 24 };
1040 - s8 lna1A_gain_db_2_rev7[] = {
1041 - 11, 17, 22, 25};
1042 - s8 lna2A_gain_db_rev7[] = { -1, 6, 10, 14 };
1043 + static const s8 lna1A_gain_db_rev7[] = { 11, 16, 20, 24 };
1044 + static const s8 lna1A_gain_db_2_rev7[] = { 11, 17, 22, 25};
1045 + static const s8 lna2A_gain_db_rev7[] = { -1, 6, 10, 14 };
1046
1047 crsminu_th = 0x3e;
1048 lna1_gain_db = lna1A_gain_db_rev7;
1049 @@ -15321,10 +15320,9 @@ static void wlc_phy_workarounds_nphy_gainctrl_2057_rev6(struct brcms_phy *pi)
1050 lna2_gain_db = lna2A_gain_db_rev7;
1051 } else if ((freq >= 5500) && (freq <= 5700)) {
1052
1053 - s8 lna1A_gain_db_rev7[] = { 11, 17, 21, 25 };
1054 - s8 lna1A_gain_db_2_rev7[] = {
1055 - 12, 18, 22, 26};
1056 - s8 lna2A_gain_db_rev7[] = { 1, 8, 12, 16 };
1057 + static const s8 lna1A_gain_db_rev7[] = { 11, 17, 21, 25 };
1058 + static const s8 lna1A_gain_db_2_rev7[] = { 12, 18, 22, 26};
1059 + static const s8 lna2A_gain_db_rev7[] = { 1, 8, 12, 16 };
1060
1061 crsminu_th = 0x45;
1062 clip1md_gaincode_B = 0x14;
1063 @@ -15335,10 +15333,9 @@ static void wlc_phy_workarounds_nphy_gainctrl_2057_rev6(struct brcms_phy *pi)
1064 lna2_gain_db = lna2A_gain_db_rev7;
1065 } else {
1066
1067 - s8 lna1A_gain_db_rev7[] = { 12, 18, 22, 26 };
1068 - s8 lna1A_gain_db_2_rev7[] = {
1069 - 12, 18, 22, 26};
1070 - s8 lna2A_gain_db_rev7[] = { -1, 6, 10, 14 };
1071 + static const s8 lna1A_gain_db_rev7[] = { 12, 18, 22, 26 };
1072 + static const s8 lna1A_gain_db_2_rev7[] = { 12, 18, 22, 26};
1073 + static const s8 lna2A_gain_db_rev7[] = { -1, 6, 10, 14 };
1074
1075 crsminu_th = 0x41;
1076 lna1_gain_db = lna1A_gain_db_rev7;
1077 @@ -15450,65 +15447,65 @@ static void wlc_phy_workarounds_nphy_gainctrl(struct brcms_phy *pi)
1078 NPHY_RFSEQ_CMD_CLR_HIQ_DIS,
1079 NPHY_RFSEQ_CMD_SET_HPF_BW
1080 };
1081 - u8 rfseq_updategainu_dlys[] = { 10, 30, 1 };
1082 - s8 lna1G_gain_db[] = { 7, 11, 16, 23 };
1083 - s8 lna1G_gain_db_rev4[] = { 8, 12, 17, 25 };
1084 - s8 lna1G_gain_db_rev5[] = { 9, 13, 18, 26 };
1085 - s8 lna1G_gain_db_rev6[] = { 8, 13, 18, 25 };
1086 - s8 lna1G_gain_db_rev6_224B0[] = { 10, 14, 19, 27 };
1087 - s8 lna1A_gain_db[] = { 7, 11, 17, 23 };
1088 - s8 lna1A_gain_db_rev4[] = { 8, 12, 18, 23 };
1089 - s8 lna1A_gain_db_rev5[] = { 6, 10, 16, 21 };
1090 - s8 lna1A_gain_db_rev6[] = { 6, 10, 16, 21 };
1091 - s8 *lna1_gain_db = NULL;
1092 - s8 lna2G_gain_db[] = { -5, 6, 10, 14 };
1093 - s8 lna2G_gain_db_rev5[] = { -3, 7, 11, 16 };
1094 - s8 lna2G_gain_db_rev6[] = { -5, 6, 10, 14 };
1095 - s8 lna2G_gain_db_rev6_224B0[] = { -5, 6, 10, 15 };
1096 - s8 lna2A_gain_db[] = { -6, 2, 6, 10 };
1097 - s8 lna2A_gain_db_rev4[] = { -5, 2, 6, 10 };
1098 - s8 lna2A_gain_db_rev5[] = { -7, 0, 4, 8 };
1099 - s8 lna2A_gain_db_rev6[] = { -7, 0, 4, 8 };
1100 - s8 *lna2_gain_db = NULL;
1101 - s8 tiaG_gain_db[] = {
1102 + static const u8 rfseq_updategainu_dlys[] = { 10, 30, 1 };
1103 + static const s8 lna1G_gain_db[] = { 7, 11, 16, 23 };
1104 + static const s8 lna1G_gain_db_rev4[] = { 8, 12, 17, 25 };
1105 + static const s8 lna1G_gain_db_rev5[] = { 9, 13, 18, 26 };
1106 + static const s8 lna1G_gain_db_rev6[] = { 8, 13, 18, 25 };
1107 + static const s8 lna1G_gain_db_rev6_224B0[] = { 10, 14, 19, 27 };
1108 + static const s8 lna1A_gain_db[] = { 7, 11, 17, 23 };
1109 + static const s8 lna1A_gain_db_rev4[] = { 8, 12, 18, 23 };
1110 + static const s8 lna1A_gain_db_rev5[] = { 6, 10, 16, 21 };
1111 + static const s8 lna1A_gain_db_rev6[] = { 6, 10, 16, 21 };
1112 + const s8 *lna1_gain_db = NULL;
1113 + static const s8 lna2G_gain_db[] = { -5, 6, 10, 14 };
1114 + static const s8 lna2G_gain_db_rev5[] = { -3, 7, 11, 16 };
1115 + static const s8 lna2G_gain_db_rev6[] = { -5, 6, 10, 14 };
1116 + static const s8 lna2G_gain_db_rev6_224B0[] = { -5, 6, 10, 15 };
1117 + static const s8 lna2A_gain_db[] = { -6, 2, 6, 10 };
1118 + static const s8 lna2A_gain_db_rev4[] = { -5, 2, 6, 10 };
1119 + static const s8 lna2A_gain_db_rev5[] = { -7, 0, 4, 8 };
1120 + static const s8 lna2A_gain_db_rev6[] = { -7, 0, 4, 8 };
1121 + const s8 *lna2_gain_db = NULL;
1122 + static const s8 tiaG_gain_db[] = {
1123 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A };
1124 - s8 tiaA_gain_db[] = {
1125 + static const s8 tiaA_gain_db[] = {
1126 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13 };
1127 - s8 tiaA_gain_db_rev4[] = {
1128 + static const s8 tiaA_gain_db_rev4[] = {
1129 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d };
1130 - s8 tiaA_gain_db_rev5[] = {
1131 + static const s8 tiaA_gain_db_rev5[] = {
1132 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d };
1133 - s8 tiaA_gain_db_rev6[] = {
1134 + static const s8 tiaA_gain_db_rev6[] = {
1135 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d, 0x0d };
1136 - s8 *tia_gain_db;
1137 - s8 tiaG_gainbits[] = {
1138 + const s8 *tia_gain_db;
1139 + static const s8 tiaG_gainbits[] = {
1140 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03 };
1141 - s8 tiaA_gainbits[] = {
1142 + static const s8 tiaA_gainbits[] = {
1143 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06 };
1144 - s8 tiaA_gainbits_rev4[] = {
1145 + static const s8 tiaA_gainbits_rev4[] = {
1146 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 };
1147 - s8 tiaA_gainbits_rev5[] = {
1148 + static const s8 tiaA_gainbits_rev5[] = {
1149 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 };
1150 - s8 tiaA_gainbits_rev6[] = {
1151 + static const s8 tiaA_gainbits_rev6[] = {
1152 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04 };
1153 - s8 *tia_gainbits;
1154 - s8 lpf_gain_db[] = { 0x00, 0x06, 0x0c, 0x12, 0x12, 0x12 };
1155 - s8 lpf_gainbits[] = { 0x00, 0x01, 0x02, 0x03, 0x03, 0x03 };
1156 - u16 rfseqG_init_gain[] = { 0x613f, 0x613f, 0x613f, 0x613f };
1157 - u16 rfseqG_init_gain_rev4[] = { 0x513f, 0x513f, 0x513f, 0x513f };
1158 - u16 rfseqG_init_gain_rev5[] = { 0x413f, 0x413f, 0x413f, 0x413f };
1159 - u16 rfseqG_init_gain_rev5_elna[] = {
1160 + const s8 *tia_gainbits;
1161 + static const s8 lpf_gain_db[] = { 0x00, 0x06, 0x0c, 0x12, 0x12, 0x12 };
1162 + static const s8 lpf_gainbits[] = { 0x00, 0x01, 0x02, 0x03, 0x03, 0x03 };
1163 + static const u16 rfseqG_init_gain[] = { 0x613f, 0x613f, 0x613f, 0x613f };
1164 + static const u16 rfseqG_init_gain_rev4[] = { 0x513f, 0x513f, 0x513f, 0x513f };
1165 + static const u16 rfseqG_init_gain_rev5[] = { 0x413f, 0x413f, 0x413f, 0x413f };
1166 + static const u16 rfseqG_init_gain_rev5_elna[] = {
1167 0x013f, 0x013f, 0x013f, 0x013f };
1168 - u16 rfseqG_init_gain_rev6[] = { 0x513f, 0x513f };
1169 - u16 rfseqG_init_gain_rev6_224B0[] = { 0x413f, 0x413f };
1170 - u16 rfseqG_init_gain_rev6_elna[] = { 0x113f, 0x113f };
1171 - u16 rfseqA_init_gain[] = { 0x516f, 0x516f, 0x516f, 0x516f };
1172 - u16 rfseqA_init_gain_rev4[] = { 0x614f, 0x614f, 0x614f, 0x614f };
1173 - u16 rfseqA_init_gain_rev4_elna[] = {
1174 + static const u16 rfseqG_init_gain_rev6[] = { 0x513f, 0x513f };
1175 + static const u16 rfseqG_init_gain_rev6_224B0[] = { 0x413f, 0x413f };
1176 + static const u16 rfseqG_init_gain_rev6_elna[] = { 0x113f, 0x113f };
1177 + static const u16 rfseqA_init_gain[] = { 0x516f, 0x516f, 0x516f, 0x516f };
1178 + static const u16 rfseqA_init_gain_rev4[] = { 0x614f, 0x614f, 0x614f, 0x614f };
1179 + static const u16 rfseqA_init_gain_rev4_elna[] = {
1180 0x314f, 0x314f, 0x314f, 0x314f };
1181 - u16 rfseqA_init_gain_rev5[] = { 0x714f, 0x714f, 0x714f, 0x714f };
1182 - u16 rfseqA_init_gain_rev6[] = { 0x714f, 0x714f };
1183 - u16 *rfseq_init_gain;
1184 + static const u16 rfseqA_init_gain_rev5[] = { 0x714f, 0x714f, 0x714f, 0x714f };
1185 + static const u16 rfseqA_init_gain_rev6[] = { 0x714f, 0x714f };
1186 + const u16 *rfseq_init_gain;
1187 u16 initG_gaincode = 0x627e;
1188 u16 initG_gaincode_rev4 = 0x527e;
1189 u16 initG_gaincode_rev5 = 0x427e;
1190 @@ -15538,10 +15535,10 @@ static void wlc_phy_workarounds_nphy_gainctrl(struct brcms_phy *pi)
1191 u16 clip1mdA_gaincode_rev6 = 0x2084;
1192 u16 clip1md_gaincode = 0;
1193 u16 clip1loG_gaincode = 0x0074;
1194 - u16 clip1loG_gaincode_rev5[] = {
1195 + static const u16 clip1loG_gaincode_rev5[] = {
1196 0x0062, 0x0064, 0x006a, 0x106a, 0x106c, 0x1074, 0x107c, 0x207c
1197 };
1198 - u16 clip1loG_gaincode_rev6[] = {
1199 + static const u16 clip1loG_gaincode_rev6[] = {
1200 0x106a, 0x106c, 0x1074, 0x107c, 0x007e, 0x107e, 0x207e, 0x307e
1201 };
1202 u16 clip1loG_gaincode_rev6_224B0 = 0x1074;
1203 @@ -16066,7 +16063,7 @@ static void wlc_phy_workarounds_nphy_gainctrl(struct brcms_phy *pi)
1204
1205 static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
1206 {
1207 - u8 rfseq_rx2tx_events[] = {
1208 + static const u8 rfseq_rx2tx_events[] = {
1209 NPHY_RFSEQ_CMD_NOP,
1210 NPHY_RFSEQ_CMD_RXG_FBW,
1211 NPHY_RFSEQ_CMD_TR_SWITCH,
1212 @@ -16076,7 +16073,7 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
1213 NPHY_RFSEQ_CMD_EXT_PA
1214 };
1215 u8 rfseq_rx2tx_dlys[] = { 8, 6, 6, 2, 4, 60, 1 };
1216 - u8 rfseq_tx2rx_events[] = {
1217 + static const u8 rfseq_tx2rx_events[] = {
1218 NPHY_RFSEQ_CMD_NOP,
1219 NPHY_RFSEQ_CMD_EXT_PA,
1220 NPHY_RFSEQ_CMD_TX_GAIN,
1221 @@ -16085,8 +16082,8 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
1222 NPHY_RFSEQ_CMD_RXG_FBW,
1223 NPHY_RFSEQ_CMD_CLR_HIQ_DIS
1224 };
1225 - u8 rfseq_tx2rx_dlys[] = { 8, 6, 2, 4, 4, 6, 1 };
1226 - u8 rfseq_tx2rx_events_rev3[] = {
1227 + static const u8 rfseq_tx2rx_dlys[] = { 8, 6, 2, 4, 4, 6, 1 };
1228 + static const u8 rfseq_tx2rx_events_rev3[] = {
1229 NPHY_REV3_RFSEQ_CMD_EXT_PA,
1230 NPHY_REV3_RFSEQ_CMD_INT_PA_PU,
1231 NPHY_REV3_RFSEQ_CMD_TX_GAIN,
1232 @@ -16096,7 +16093,7 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
1233 NPHY_REV3_RFSEQ_CMD_CLR_HIQ_DIS,
1234 NPHY_REV3_RFSEQ_CMD_END
1235 };
1236 - u8 rfseq_tx2rx_dlys_rev3[] = { 8, 4, 2, 2, 4, 4, 6, 1 };
1237 + static const u8 rfseq_tx2rx_dlys_rev3[] = { 8, 4, 2, 2, 4, 4, 6, 1 };
1238 u8 rfseq_rx2tx_events_rev3[] = {
1239 NPHY_REV3_RFSEQ_CMD_NOP,
1240 NPHY_REV3_RFSEQ_CMD_RXG_FBW,
1241 @@ -16110,7 +16107,7 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
1242 };
1243 u8 rfseq_rx2tx_dlys_rev3[] = { 8, 6, 6, 4, 4, 18, 42, 1, 1 };
1244
1245 - u8 rfseq_rx2tx_events_rev3_ipa[] = {
1246 + static const u8 rfseq_rx2tx_events_rev3_ipa[] = {
1247 NPHY_REV3_RFSEQ_CMD_NOP,
1248 NPHY_REV3_RFSEQ_CMD_RXG_FBW,
1249 NPHY_REV3_RFSEQ_CMD_TR_SWITCH,
1250 @@ -16121,15 +16118,15 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
1251 NPHY_REV3_RFSEQ_CMD_INT_PA_PU,
1252 NPHY_REV3_RFSEQ_CMD_END
1253 };
1254 - u8 rfseq_rx2tx_dlys_rev3_ipa[] = { 8, 6, 6, 4, 4, 16, 43, 1, 1 };
1255 - u16 rfseq_rx2tx_dacbufpu_rev7[] = { 0x10f, 0x10f };
1256 + static const u8 rfseq_rx2tx_dlys_rev3_ipa[] = { 8, 6, 6, 4, 4, 16, 43, 1, 1 };
1257 + static const u16 rfseq_rx2tx_dacbufpu_rev7[] = { 0x10f, 0x10f };
1258
1259 s16 alpha0, alpha1, alpha2;
1260 s16 beta0, beta1, beta2;
1261 u32 leg_data_weights, ht_data_weights, nss1_data_weights,
1262 stbc_data_weights;
1263 u8 chan_freq_range = 0;
1264 - u16 dac_control = 0x0002;
1265 + static const u16 dac_control = 0x0002;
1266 u16 aux_adc_vmid_rev7_core0[] = { 0x8e, 0x96, 0x96, 0x96 };
1267 u16 aux_adc_vmid_rev7_core1[] = { 0x8f, 0x9f, 0x9f, 0x96 };
1268 u16 aux_adc_vmid_rev4[] = { 0xa2, 0xb4, 0xb4, 0x89 };
1269 @@ -16139,8 +16136,8 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
1270 u16 aux_adc_gain_rev4[] = { 0x02, 0x02, 0x02, 0x00 };
1271 u16 aux_adc_gain_rev3[] = { 0x02, 0x02, 0x02, 0x00 };
1272 u16 *aux_adc_gain;
1273 - u16 sk_adc_vmid[] = { 0xb4, 0xb4, 0xb4, 0x24 };
1274 - u16 sk_adc_gain[] = { 0x02, 0x02, 0x02, 0x02 };
1275 + static const u16 sk_adc_vmid[] = { 0xb4, 0xb4, 0xb4, 0x24 };
1276 + static const u16 sk_adc_gain[] = { 0x02, 0x02, 0x02, 0x02 };
1277 s32 min_nvar_val = 0x18d;
1278 s32 min_nvar_offset_6mbps = 20;
1279 u8 pdetrange;
1280 @@ -16151,9 +16148,9 @@ static void wlc_phy_workarounds_nphy(struct brcms_phy *pi)
1281 u16 rfseq_rx2tx_lpf_h_hpc_rev7 = 0x77;
1282 u16 rfseq_tx2rx_lpf_h_hpc_rev7 = 0x77;
1283 u16 rfseq_pktgn_lpf_h_hpc_rev7 = 0x77;
1284 - u16 rfseq_htpktgn_lpf_hpc_rev7[] = { 0x77, 0x11, 0x11 };
1285 - u16 rfseq_pktgn_lpf_hpc_rev7[] = { 0x11, 0x11 };
1286 - u16 rfseq_cckpktgn_lpf_hpc_rev7[] = { 0x11, 0x11 };
1287 + static const u16 rfseq_htpktgn_lpf_hpc_rev7[] = { 0x77, 0x11, 0x11 };
1288 + static const u16 rfseq_pktgn_lpf_hpc_rev7[] = { 0x11, 0x11 };
1289 + static const u16 rfseq_cckpktgn_lpf_hpc_rev7[] = { 0x11, 0x11 };
1290 u16 ipalvlshift_3p3_war_en = 0;
1291 u16 rccal_bcap_val, rccal_scap_val;
1292 u16 rccal_tx20_11b_bcap = 0;
1293 @@ -24291,13 +24288,13 @@ static void wlc_phy_update_txcal_ladder_nphy(struct brcms_phy *pi, u16 core)
1294 u16 bbmult;
1295 u16 tblentry;
1296
1297 - struct nphy_txiqcal_ladder ladder_lo[] = {
1298 + static const struct nphy_txiqcal_ladder ladder_lo[] = {
1299 {3, 0}, {4, 0}, {6, 0}, {9, 0}, {13, 0}, {18, 0},
1300 {25, 0}, {25, 1}, {25, 2}, {25, 3}, {25, 4}, {25, 5},
1301 {25, 6}, {25, 7}, {35, 7}, {50, 7}, {71, 7}, {100, 7}
1302 };
1303
1304 - struct nphy_txiqcal_ladder ladder_iq[] = {
1305 + static const struct nphy_txiqcal_ladder ladder_iq[] = {
1306 {3, 0}, {4, 0}, {6, 0}, {9, 0}, {13, 0}, {18, 0},
1307 {25, 0}, {35, 0}, {50, 0}, {71, 0}, {100, 0}, {100, 1},
1308 {100, 2}, {100, 3}, {100, 4}, {100, 5}, {100, 6}, {100, 7}
1309 @@ -25773,67 +25770,67 @@ wlc_phy_cal_txiqlo_nphy(struct brcms_phy *pi, struct nphy_txgains target_gain,
1310 u16 cal_gain[2];
1311 struct nphy_iqcal_params cal_params[2];
1312 u32 tbl_len;
1313 - void *tbl_ptr;
1314 + const void *tbl_ptr;
1315 bool ladder_updated[2];
1316 u8 mphase_cal_lastphase = 0;
1317 int bcmerror = 0;
1318 bool phyhang_avoid_state = false;
1319
1320 - u16 tbl_tx_iqlo_cal_loft_ladder_20[] = {
1321 + static const u16 tbl_tx_iqlo_cal_loft_ladder_20[] = {
1322 0x0300, 0x0500, 0x0700, 0x0900, 0x0d00, 0x1100, 0x1900, 0x1901,
1323 0x1902,
1324 0x1903, 0x1904, 0x1905, 0x1906, 0x1907, 0x2407, 0x3207, 0x4607,
1325 0x6407
1326 };
1327
1328 - u16 tbl_tx_iqlo_cal_iqimb_ladder_20[] = {
1329 + static const u16 tbl_tx_iqlo_cal_iqimb_ladder_20[] = {
1330 0x0200, 0x0300, 0x0600, 0x0900, 0x0d00, 0x1100, 0x1900, 0x2400,
1331 0x3200,
1332 0x4600, 0x6400, 0x6401, 0x6402, 0x6403, 0x6404, 0x6405, 0x6406,
1333 0x6407
1334 };
1335
1336 - u16 tbl_tx_iqlo_cal_loft_ladder_40[] = {
1337 + static const u16 tbl_tx_iqlo_cal_loft_ladder_40[] = {
1338 0x0200, 0x0300, 0x0400, 0x0700, 0x0900, 0x0c00, 0x1200, 0x1201,
1339 0x1202,
1340 0x1203, 0x1204, 0x1205, 0x1206, 0x1207, 0x1907, 0x2307, 0x3207,
1341 0x4707
1342 };
1343
1344 - u16 tbl_tx_iqlo_cal_iqimb_ladder_40[] = {
1345 + static const u16 tbl_tx_iqlo_cal_iqimb_ladder_40[] = {
1346 0x0100, 0x0200, 0x0400, 0x0700, 0x0900, 0x0c00, 0x1200, 0x1900,
1347 0x2300,
1348 0x3200, 0x4700, 0x4701, 0x4702, 0x4703, 0x4704, 0x4705, 0x4706,
1349 0x4707
1350 };
1351
1352 - u16 tbl_tx_iqlo_cal_startcoefs[] = {
1353 + static const u16 tbl_tx_iqlo_cal_startcoefs[] = {
1354 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1355 0x0000
1356 };
1357
1358 - u16 tbl_tx_iqlo_cal_cmds_fullcal[] = {
1359 + static const u16 tbl_tx_iqlo_cal_cmds_fullcal[] = {
1360 0x8123, 0x8264, 0x8086, 0x8245, 0x8056,
1361 0x9123, 0x9264, 0x9086, 0x9245, 0x9056
1362 };
1363
1364 - u16 tbl_tx_iqlo_cal_cmds_recal[] = {
1365 + static const u16 tbl_tx_iqlo_cal_cmds_recal[] = {
1366 0x8101, 0x8253, 0x8053, 0x8234, 0x8034,
1367 0x9101, 0x9253, 0x9053, 0x9234, 0x9034
1368 };
1369
1370 - u16 tbl_tx_iqlo_cal_startcoefs_nphyrev3[] = {
1371 + static const u16 tbl_tx_iqlo_cal_startcoefs_nphyrev3[] = {
1372 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1373 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
1374 0x0000
1375 };
1376
1377 - u16 tbl_tx_iqlo_cal_cmds_fullcal_nphyrev3[] = {
1378 + static const u16 tbl_tx_iqlo_cal_cmds_fullcal_nphyrev3[] = {
1379 0x8434, 0x8334, 0x8084, 0x8267, 0x8056, 0x8234,
1380 0x9434, 0x9334, 0x9084, 0x9267, 0x9056, 0x9234
1381 };
1382
1383 - u16 tbl_tx_iqlo_cal_cmds_recal_nphyrev3[] = {
1384 + static const u16 tbl_tx_iqlo_cal_cmds_recal_nphyrev3[] = {
1385 0x8423, 0x8323, 0x8073, 0x8256, 0x8045, 0x8223,
1386 0x9423, 0x9323, 0x9073, 0x9256, 0x9045, 0x9223
1387 };
1388 diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
1389 index 2bc6bace069c..b4302f41493c 100644
1390 --- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
1391 +++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
1392 @@ -1122,7 +1122,7 @@ static u8 _rtl8821ae_dbi_read(struct rtl_priv *rtlpriv, u16 addr)
1393 }
1394 if (0 == tmp) {
1395 read_addr = REG_DBI_RDATA + addr % 4;
1396 - ret = rtl_read_byte(rtlpriv, read_addr);
1397 + ret = rtl_read_word(rtlpriv, read_addr);
1398 }
1399 return ret;
1400 }
1401 diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
1402 index df57655779ed..5da006d81900 100644
1403 --- a/drivers/scsi/qla2xxx/qla_os.c
1404 +++ b/drivers/scsi/qla2xxx/qla_os.c
1405 @@ -3165,6 +3165,8 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
1406 host->can_queue, base_vha->req,
1407 base_vha->mgmt_svr_loop_id, host->sg_tablesize);
1408
1409 + INIT_WORK(&base_vha->iocb_work, qla2x00_iocb_work_fn);
1410 +
1411 if (ha->mqenable) {
1412 bool mq = false;
1413 bool startit = false;
1414 @@ -3213,7 +3215,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
1415 */
1416 qla2xxx_wake_dpc(base_vha);
1417
1418 - INIT_WORK(&base_vha->iocb_work, qla2x00_iocb_work_fn);
1419 INIT_WORK(&ha->board_disable, qla2x00_disable_board_on_pci_error);
1420
1421 if (IS_QLA8031(ha) || IS_MCTP_CAPABLE(ha)) {
1422 diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
1423 index 5f3d8f2339e3..4be864dbd41c 100644
1424 --- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
1425 +++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
1426 @@ -390,8 +390,7 @@ static int bcm2835_audio_open_connection(struct bcm2835_alsa_stream *alsa_stream
1427 __func__, instance);
1428 instance->alsa_stream = alsa_stream;
1429 alsa_stream->instance = instance;
1430 - ret = 0; // xxx todo -1;
1431 - goto err_free_mem;
1432 + return 0;
1433 }
1434
1435 /* Initialize and create a VCHI connection */
1436 @@ -401,16 +400,15 @@ static int bcm2835_audio_open_connection(struct bcm2835_alsa_stream *alsa_stream
1437 LOG_ERR("%s: failed to initialise VCHI instance (ret=%d)\n",
1438 __func__, ret);
1439
1440 - ret = -EIO;
1441 - goto err_free_mem;
1442 + return -EIO;
1443 }
1444 ret = vchi_connect(NULL, 0, vchi_instance);
1445 if (ret) {
1446 LOG_ERR("%s: failed to connect VCHI instance (ret=%d)\n",
1447 __func__, ret);
1448
1449 - ret = -EIO;
1450 - goto err_free_mem;
1451 + kfree(vchi_instance);
1452 + return -EIO;
1453 }
1454 initted = 1;
1455 }
1456 @@ -421,19 +419,16 @@ static int bcm2835_audio_open_connection(struct bcm2835_alsa_stream *alsa_stream
1457 if (IS_ERR(instance)) {
1458 LOG_ERR("%s: failed to initialize audio service\n", __func__);
1459
1460 - ret = PTR_ERR(instance);
1461 - goto err_free_mem;
1462 + /* vchi_instance is retained for use the next time. */
1463 + return PTR_ERR(instance);
1464 }
1465
1466 instance->alsa_stream = alsa_stream;
1467 alsa_stream->instance = instance;
1468
1469 LOG_DBG(" success !\n");
1470 - ret = 0;
1471 -err_free_mem:
1472 - kfree(vchi_instance);
1473
1474 - return ret;
1475 + return 0;
1476 }
1477
1478 int bcm2835_audio_open(struct bcm2835_alsa_stream *alsa_stream)
1479 diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c
1480 index 5e056064259c..18c923a4c16e 100644
1481 --- a/drivers/usb/class/cdc-acm.c
1482 +++ b/drivers/usb/class/cdc-acm.c
1483 @@ -1832,6 +1832,9 @@ static const struct usb_device_id acm_ids[] = {
1484 { USB_DEVICE(0xfff0, 0x0100), /* DATECS FP-2000 */
1485 .driver_info = NO_UNION_NORMAL, /* reports zero length descriptor */
1486 },
1487 + { USB_DEVICE(0x09d8, 0x0320), /* Elatec GmbH TWN3 */
1488 + .driver_info = NO_UNION_NORMAL, /* has misplaced union descriptor */
1489 + },
1490
1491 { USB_DEVICE(0x2912, 0x0001), /* ATOL FPrint */
1492 .driver_info = CLEAR_HALT_CONDITIONS,
1493 diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
1494 index 68b54bd88d1e..883549ee946c 100644
1495 --- a/drivers/usb/core/config.c
1496 +++ b/drivers/usb/core/config.c
1497 @@ -960,10 +960,12 @@ int usb_get_bos_descriptor(struct usb_device *dev)
1498 for (i = 0; i < num; i++) {
1499 buffer += length;
1500 cap = (struct usb_dev_cap_header *)buffer;
1501 - length = cap->bLength;
1502
1503 - if (total_len < length)
1504 + if (total_len < sizeof(*cap) || total_len < cap->bLength) {
1505 + dev->bos->desc->bNumDeviceCaps = i;
1506 break;
1507 + }
1508 + length = cap->bLength;
1509 total_len -= length;
1510
1511 if (cap->bDescriptorType != USB_DT_DEVICE_CAPABILITY) {
1512 diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c
1513 index 1d4dfdeb61c1..066b58cb6c98 100644
1514 --- a/drivers/usb/core/devio.c
1515 +++ b/drivers/usb/core/devio.c
1516 @@ -1576,11 +1576,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb
1517 totlen += isopkt[u].length;
1518 }
1519 u *= sizeof(struct usb_iso_packet_descriptor);
1520 - if (totlen <= uurb->buffer_length)
1521 - uurb->buffer_length = totlen;
1522 - else
1523 - WARN_ONCE(1, "uurb->buffer_length is too short %d vs %d",
1524 - totlen, uurb->buffer_length);
1525 + uurb->buffer_length = totlen;
1526 break;
1527
1528 default:
1529 diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
1530 index 78c2aca5b0fc..3f44341259d8 100644
1531 --- a/drivers/usb/core/hub.c
1532 +++ b/drivers/usb/core/hub.c
1533 @@ -2710,13 +2710,16 @@ static int hub_port_wait_reset(struct usb_hub *hub, int port1,
1534 if (!(portstatus & USB_PORT_STAT_CONNECTION))
1535 return -ENOTCONN;
1536
1537 - /* bomb out completely if the connection bounced. A USB 3.0
1538 - * connection may bounce if multiple warm resets were issued,
1539 + /* Retry if connect change is set but status is still connected.
1540 + * A USB 3.0 connection may bounce if multiple warm resets were issued,
1541 * but the device may have successfully re-connected. Ignore it.
1542 */
1543 if (!hub_is_superspeed(hub->hdev) &&
1544 - (portchange & USB_PORT_STAT_C_CONNECTION))
1545 - return -ENOTCONN;
1546 + (portchange & USB_PORT_STAT_C_CONNECTION)) {
1547 + usb_clear_port_feature(hub->hdev, port1,
1548 + USB_PORT_FEAT_C_CONNECTION);
1549 + return -EAGAIN;
1550 + }
1551
1552 if (!(portstatus & USB_PORT_STAT_ENABLE))
1553 return -EBUSY;
1554 diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
1555 index 82806e311202..a6aaf2f193a4 100644
1556 --- a/drivers/usb/core/quirks.c
1557 +++ b/drivers/usb/core/quirks.c
1558 @@ -221,6 +221,10 @@ static const struct usb_device_id usb_quirk_list[] = {
1559 /* Corsair Strafe RGB */
1560 { USB_DEVICE(0x1b1c, 0x1b20), .driver_info = USB_QUIRK_DELAY_INIT },
1561
1562 + /* MIDI keyboard WORLDE MINI */
1563 + { USB_DEVICE(0x1c75, 0x0204), .driver_info =
1564 + USB_QUIRK_CONFIG_INTF_STRINGS },
1565 +
1566 /* Acer C120 LED Projector */
1567 { USB_DEVICE(0x1de1, 0xc102), .driver_info = USB_QUIRK_NO_LPM },
1568
1569 diff --git a/drivers/usb/host/xhci-hub.c b/drivers/usb/host/xhci-hub.c
1570 index 950dee33bfcc..ad4c697cf30e 100644
1571 --- a/drivers/usb/host/xhci-hub.c
1572 +++ b/drivers/usb/host/xhci-hub.c
1573 @@ -420,14 +420,25 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend)
1574 GFP_NOWAIT);
1575 if (!command) {
1576 spin_unlock_irqrestore(&xhci->lock, flags);
1577 - xhci_free_command(xhci, cmd);
1578 - return -ENOMEM;
1579 + ret = -ENOMEM;
1580 + goto cmd_cleanup;
1581 + }
1582 +
1583 + ret = xhci_queue_stop_endpoint(xhci, command, slot_id,
1584 + i, suspend);
1585 + if (ret) {
1586 + spin_unlock_irqrestore(&xhci->lock, flags);
1587 + xhci_free_command(xhci, command);
1588 + goto cmd_cleanup;
1589 }
1590 - xhci_queue_stop_endpoint(xhci, command, slot_id, i,
1591 - suspend);
1592 }
1593 }
1594 - xhci_queue_stop_endpoint(xhci, cmd, slot_id, 0, suspend);
1595 + ret = xhci_queue_stop_endpoint(xhci, cmd, slot_id, 0, suspend);
1596 + if (ret) {
1597 + spin_unlock_irqrestore(&xhci->lock, flags);
1598 + goto cmd_cleanup;
1599 + }
1600 +
1601 xhci_ring_cmd_db(xhci);
1602 spin_unlock_irqrestore(&xhci->lock, flags);
1603
1604 @@ -439,6 +450,8 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend)
1605 xhci_warn(xhci, "Timeout while waiting for stop endpoint command\n");
1606 ret = -ETIME;
1607 }
1608 +
1609 +cmd_cleanup:
1610 xhci_free_command(xhci, cmd);
1611 return ret;
1612 }
1613 diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
1614 index cc368ad2b51e..b0f42e1b91ee 100644
1615 --- a/drivers/usb/host/xhci-ring.c
1616 +++ b/drivers/usb/host/xhci-ring.c
1617 @@ -1309,6 +1309,7 @@ static void xhci_complete_del_and_free_cmd(struct xhci_command *cmd, u32 status)
1618 void xhci_cleanup_command_queue(struct xhci_hcd *xhci)
1619 {
1620 struct xhci_command *cur_cmd, *tmp_cmd;
1621 + xhci->current_cmd = NULL;
1622 list_for_each_entry_safe(cur_cmd, tmp_cmd, &xhci->cmd_list, cmd_list)
1623 xhci_complete_del_and_free_cmd(cur_cmd, COMP_COMMAND_ABORTED);
1624 }
1625 @@ -2577,15 +2578,21 @@ static int handle_tx_event(struct xhci_hcd *xhci,
1626 (struct xhci_generic_trb *) ep_trb);
1627
1628 /*
1629 - * No-op TRB should not trigger interrupts.
1630 - * If ep_trb is a no-op TRB, it means the
1631 - * corresponding TD has been cancelled. Just ignore
1632 - * the TD.
1633 + * No-op TRB could trigger interrupts in a case where
1634 + * a URB was killed and a STALL_ERROR happens right
1635 + * after the endpoint ring stopped. Reset the halted
1636 + * endpoint. Otherwise, the endpoint remains stalled
1637 + * indefinitely.
1638 */
1639 if (trb_is_noop(ep_trb)) {
1640 - xhci_dbg(xhci,
1641 - "ep_trb is a no-op TRB. Skip it for slot %u ep %u\n",
1642 - slot_id, ep_index);
1643 + if (trb_comp_code == COMP_STALL_ERROR ||
1644 + xhci_requires_manual_halt_cleanup(xhci, ep_ctx,
1645 + trb_comp_code))
1646 + xhci_cleanup_halted_endpoint(xhci, slot_id,
1647 + ep_index,
1648 + ep_ring->stream_id,
1649 + td, ep_trb,
1650 + EP_HARD_RESET);
1651 goto cleanup;
1652 }
1653
1654 diff --git a/drivers/usb/host/xhci.c b/drivers/usb/host/xhci.c
1655 index ee198ea47f49..51535ba2bcd4 100644
1656 --- a/drivers/usb/host/xhci.c
1657 +++ b/drivers/usb/host/xhci.c
1658 @@ -4805,7 +4805,8 @@ int xhci_gen_setup(struct usb_hcd *hcd, xhci_get_quirks_t get_quirks)
1659 */
1660 hcd->has_tt = 1;
1661 } else {
1662 - if (xhci->sbrn == 0x31) {
1663 + /* Some 3.1 hosts return sbrn 0x30, can't rely on sbrn alone */
1664 + if (xhci->sbrn == 0x31 || xhci->usb3_rhub.min_rev >= 1) {
1665 xhci_info(xhci, "Host supports USB 3.1 Enhanced SuperSpeed\n");
1666 hcd->speed = HCD_USB31;
1667 hcd->self.root_hub->speed = USB_SPEED_SUPER_PLUS;
1668 diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
1669 index b67692857daf..458957e97fee 100644
1670 --- a/drivers/usb/musb/musb_core.c
1671 +++ b/drivers/usb/musb/musb_core.c
1672 @@ -906,7 +906,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
1673 */
1674 if (int_usb & MUSB_INTR_RESET) {
1675 handled = IRQ_HANDLED;
1676 - if (devctl & MUSB_DEVCTL_HM) {
1677 + if (is_host_active(musb)) {
1678 /*
1679 * When BABBLE happens what we can depends on which
1680 * platform MUSB is running, because some platforms
1681 @@ -916,9 +916,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
1682 * drop the session.
1683 */
1684 dev_err(musb->controller, "Babble\n");
1685 -
1686 - if (is_host_active(musb))
1687 - musb_recover_from_babble(musb);
1688 + musb_recover_from_babble(musb);
1689 } else {
1690 musb_dbg(musb, "BUS RESET as %s",
1691 usb_otg_state_string(musb->xceiv->otg->state));
1692 @@ -1861,22 +1859,22 @@ static void musb_pm_runtime_check_session(struct musb *musb)
1693 MUSB_DEVCTL_HR;
1694 switch (devctl & ~s) {
1695 case MUSB_QUIRK_B_INVALID_VBUS_91:
1696 - if (musb->quirk_retries--) {
1697 + if (musb->quirk_retries && !musb->flush_irq_work) {
1698 musb_dbg(musb,
1699 "Poll devctl on invalid vbus, assume no session");
1700 schedule_delayed_work(&musb->irq_work,
1701 msecs_to_jiffies(1000));
1702 -
1703 + musb->quirk_retries--;
1704 return;
1705 }
1706 /* fall through */
1707 case MUSB_QUIRK_A_DISCONNECT_19:
1708 - if (musb->quirk_retries--) {
1709 + if (musb->quirk_retries && !musb->flush_irq_work) {
1710 musb_dbg(musb,
1711 "Poll devctl on possible host mode disconnect");
1712 schedule_delayed_work(&musb->irq_work,
1713 msecs_to_jiffies(1000));
1714 -
1715 + musb->quirk_retries--;
1716 return;
1717 }
1718 if (!musb->session)
1719 @@ -2681,8 +2679,15 @@ static int musb_suspend(struct device *dev)
1720
1721 musb_platform_disable(musb);
1722 musb_disable_interrupts(musb);
1723 +
1724 + musb->flush_irq_work = true;
1725 + while (flush_delayed_work(&musb->irq_work))
1726 + ;
1727 + musb->flush_irq_work = false;
1728 +
1729 if (!(musb->io.quirks & MUSB_PRESERVE_SESSION))
1730 musb_writeb(musb->mregs, MUSB_DEVCTL, 0);
1731 +
1732 WARN_ON(!list_empty(&musb->pending_list));
1733
1734 spin_lock_irqsave(&musb->lock, flags);
1735 diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
1736 index 9f22c5b8ce37..1830a571d025 100644
1737 --- a/drivers/usb/musb/musb_core.h
1738 +++ b/drivers/usb/musb/musb_core.h
1739 @@ -428,6 +428,8 @@ struct musb {
1740 unsigned test_mode:1;
1741 unsigned softconnect:1;
1742
1743 + unsigned flush_irq_work:1;
1744 +
1745 u8 address;
1746 u8 test_mode_nr;
1747 u16 ackpend; /* ep0 */
1748 diff --git a/drivers/usb/musb/musb_cppi41.c b/drivers/usb/musb/musb_cppi41.c
1749 index ba255280a624..1ec0a4947b6b 100644
1750 --- a/drivers/usb/musb/musb_cppi41.c
1751 +++ b/drivers/usb/musb/musb_cppi41.c
1752 @@ -26,15 +26,28 @@
1753
1754 #define MUSB_DMA_NUM_CHANNELS 15
1755
1756 +#define DA8XX_USB_MODE 0x10
1757 +#define DA8XX_USB_AUTOREQ 0x14
1758 +#define DA8XX_USB_TEARDOWN 0x1c
1759 +
1760 +#define DA8XX_DMA_NUM_CHANNELS 4
1761 +
1762 struct cppi41_dma_controller {
1763 struct dma_controller controller;
1764 - struct cppi41_dma_channel rx_channel[MUSB_DMA_NUM_CHANNELS];
1765 - struct cppi41_dma_channel tx_channel[MUSB_DMA_NUM_CHANNELS];
1766 + struct cppi41_dma_channel *rx_channel;
1767 + struct cppi41_dma_channel *tx_channel;
1768 struct hrtimer early_tx;
1769 struct list_head early_tx_list;
1770 u32 rx_mode;
1771 u32 tx_mode;
1772 u32 auto_req;
1773 +
1774 + u32 tdown_reg;
1775 + u32 autoreq_reg;
1776 +
1777 + void (*set_dma_mode)(struct cppi41_dma_channel *cppi41_channel,
1778 + unsigned int mode);
1779 + u8 num_channels;
1780 };
1781
1782 static void save_rx_toggle(struct cppi41_dma_channel *cppi41_channel)
1783 @@ -349,6 +362,32 @@ static void cppi41_set_dma_mode(struct cppi41_dma_channel *cppi41_channel,
1784 }
1785 }
1786
1787 +static void da8xx_set_dma_mode(struct cppi41_dma_channel *cppi41_channel,
1788 + unsigned int mode)
1789 +{
1790 + struct cppi41_dma_controller *controller = cppi41_channel->controller;
1791 + struct musb *musb = controller->controller.musb;
1792 + unsigned int shift;
1793 + u32 port;
1794 + u32 new_mode;
1795 + u32 old_mode;
1796 +
1797 + old_mode = controller->tx_mode;
1798 + port = cppi41_channel->port_num;
1799 +
1800 + shift = (port - 1) * 4;
1801 + if (!cppi41_channel->is_tx)
1802 + shift += 16;
1803 + new_mode = old_mode & ~(3 << shift);
1804 + new_mode |= mode << shift;
1805 +
1806 + if (new_mode == old_mode)
1807 + return;
1808 + controller->tx_mode = new_mode;
1809 + musb_writel(musb->ctrl_base, DA8XX_USB_MODE, new_mode);
1810 +}
1811 +
1812 +
1813 static void cppi41_set_autoreq_mode(struct cppi41_dma_channel *cppi41_channel,
1814 unsigned mode)
1815 {
1816 @@ -364,8 +403,8 @@ static void cppi41_set_autoreq_mode(struct cppi41_dma_channel *cppi41_channel,
1817 if (new_mode == old_mode)
1818 return;
1819 controller->auto_req = new_mode;
1820 - musb_writel(controller->controller.musb->ctrl_base, USB_CTRL_AUTOREQ,
1821 - new_mode);
1822 + musb_writel(controller->controller.musb->ctrl_base,
1823 + controller->autoreq_reg, new_mode);
1824 }
1825
1826 static bool cppi41_configure_channel(struct dma_channel *channel,
1827 @@ -373,6 +412,7 @@ static bool cppi41_configure_channel(struct dma_channel *channel,
1828 dma_addr_t dma_addr, u32 len)
1829 {
1830 struct cppi41_dma_channel *cppi41_channel = channel->private_data;
1831 + struct cppi41_dma_controller *controller = cppi41_channel->controller;
1832 struct dma_chan *dc = cppi41_channel->dc;
1833 struct dma_async_tx_descriptor *dma_desc;
1834 enum dma_transfer_direction direction;
1835 @@ -398,7 +438,7 @@ static bool cppi41_configure_channel(struct dma_channel *channel,
1836 musb_writel(musb->ctrl_base,
1837 RNDIS_REG(cppi41_channel->port_num), len);
1838 /* gen rndis */
1839 - cppi41_set_dma_mode(cppi41_channel,
1840 + controller->set_dma_mode(cppi41_channel,
1841 EP_MODE_DMA_GEN_RNDIS);
1842
1843 /* auto req */
1844 @@ -407,14 +447,15 @@ static bool cppi41_configure_channel(struct dma_channel *channel,
1845 } else {
1846 musb_writel(musb->ctrl_base,
1847 RNDIS_REG(cppi41_channel->port_num), 0);
1848 - cppi41_set_dma_mode(cppi41_channel,
1849 + controller->set_dma_mode(cppi41_channel,
1850 EP_MODE_DMA_TRANSPARENT);
1851 cppi41_set_autoreq_mode(cppi41_channel,
1852 EP_MODE_AUTOREQ_NONE);
1853 }
1854 } else {
1855 /* fallback mode */
1856 - cppi41_set_dma_mode(cppi41_channel, EP_MODE_DMA_TRANSPARENT);
1857 + controller->set_dma_mode(cppi41_channel,
1858 + EP_MODE_DMA_TRANSPARENT);
1859 cppi41_set_autoreq_mode(cppi41_channel, EP_MODE_AUTOREQ_NONE);
1860 len = min_t(u32, packet_sz, len);
1861 }
1862 @@ -445,7 +486,7 @@ static struct dma_channel *cppi41_dma_channel_allocate(struct dma_controller *c,
1863 struct cppi41_dma_channel *cppi41_channel = NULL;
1864 u8 ch_num = hw_ep->epnum - 1;
1865
1866 - if (ch_num >= MUSB_DMA_NUM_CHANNELS)
1867 + if (ch_num >= controller->num_channels)
1868 return NULL;
1869
1870 if (is_tx)
1871 @@ -581,12 +622,13 @@ static int cppi41_dma_channel_abort(struct dma_channel *channel)
1872
1873 do {
1874 if (is_tx)
1875 - musb_writel(musb->ctrl_base, USB_TDOWN, tdbit);
1876 + musb_writel(musb->ctrl_base, controller->tdown_reg,
1877 + tdbit);
1878 ret = dmaengine_terminate_all(cppi41_channel->dc);
1879 } while (ret == -EAGAIN);
1880
1881 if (is_tx) {
1882 - musb_writel(musb->ctrl_base, USB_TDOWN, tdbit);
1883 + musb_writel(musb->ctrl_base, controller->tdown_reg, tdbit);
1884
1885 csr = musb_readw(epio, MUSB_TXCSR);
1886 if (csr & MUSB_TXCSR_TXPKTRDY) {
1887 @@ -604,7 +646,7 @@ static void cppi41_release_all_dma_chans(struct cppi41_dma_controller *ctrl)
1888 struct dma_chan *dc;
1889 int i;
1890
1891 - for (i = 0; i < MUSB_DMA_NUM_CHANNELS; i++) {
1892 + for (i = 0; i < ctrl->num_channels; i++) {
1893 dc = ctrl->tx_channel[i].dc;
1894 if (dc)
1895 dma_release_channel(dc);
1896 @@ -656,7 +698,7 @@ static int cppi41_dma_controller_start(struct cppi41_dma_controller *controller)
1897 goto err;
1898
1899 ret = -EINVAL;
1900 - if (port > MUSB_DMA_NUM_CHANNELS || !port)
1901 + if (port > controller->num_channels || !port)
1902 goto err;
1903 if (is_tx)
1904 cppi41_channel = &controller->tx_channel[port - 1];
1905 @@ -697,6 +739,8 @@ void cppi41_dma_controller_destroy(struct dma_controller *c)
1906
1907 hrtimer_cancel(&controller->early_tx);
1908 cppi41_dma_controller_stop(controller);
1909 + kfree(controller->rx_channel);
1910 + kfree(controller->tx_channel);
1911 kfree(controller);
1912 }
1913 EXPORT_SYMBOL_GPL(cppi41_dma_controller_destroy);
1914 @@ -705,6 +749,7 @@ struct dma_controller *
1915 cppi41_dma_controller_create(struct musb *musb, void __iomem *base)
1916 {
1917 struct cppi41_dma_controller *controller;
1918 + int channel_size;
1919 int ret = 0;
1920
1921 if (!musb->controller->parent->of_node) {
1922 @@ -727,12 +772,37 @@ cppi41_dma_controller_create(struct musb *musb, void __iomem *base)
1923 controller->controller.is_compatible = cppi41_is_compatible;
1924 controller->controller.musb = musb;
1925
1926 + if (musb->io.quirks & MUSB_DA8XX) {
1927 + controller->tdown_reg = DA8XX_USB_TEARDOWN;
1928 + controller->autoreq_reg = DA8XX_USB_AUTOREQ;
1929 + controller->set_dma_mode = da8xx_set_dma_mode;
1930 + controller->num_channels = DA8XX_DMA_NUM_CHANNELS;
1931 + } else {
1932 + controller->tdown_reg = USB_TDOWN;
1933 + controller->autoreq_reg = USB_CTRL_AUTOREQ;
1934 + controller->set_dma_mode = cppi41_set_dma_mode;
1935 + controller->num_channels = MUSB_DMA_NUM_CHANNELS;
1936 + }
1937 +
1938 + channel_size = controller->num_channels *
1939 + sizeof(struct cppi41_dma_channel);
1940 + controller->rx_channel = kzalloc(channel_size, GFP_KERNEL);
1941 + if (!controller->rx_channel)
1942 + goto rx_channel_alloc_fail;
1943 + controller->tx_channel = kzalloc(channel_size, GFP_KERNEL);
1944 + if (!controller->tx_channel)
1945 + goto tx_channel_alloc_fail;
1946 +
1947 ret = cppi41_dma_controller_start(controller);
1948 if (ret)
1949 goto plat_get_fail;
1950 return &controller->controller;
1951
1952 plat_get_fail:
1953 + kfree(controller->tx_channel);
1954 +tx_channel_alloc_fail:
1955 + kfree(controller->rx_channel);
1956 +rx_channel_alloc_fail:
1957 kfree(controller);
1958 kzalloc_fail:
1959 if (ret == -EPROBE_DEFER)
1960 diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
1961 index c9a09b5bb6e5..dc353e24d53c 100644
1962 --- a/drivers/usb/musb/sunxi.c
1963 +++ b/drivers/usb/musb/sunxi.c
1964 @@ -297,6 +297,8 @@ static int sunxi_musb_exit(struct musb *musb)
1965 if (test_bit(SUNXI_MUSB_FL_HAS_SRAM, &glue->flags))
1966 sunxi_sram_release(musb->controller->parent);
1967
1968 + devm_usb_put_phy(glue->dev, glue->xceiv);
1969 +
1970 return 0;
1971 }
1972
1973 diff --git a/drivers/usb/serial/metro-usb.c b/drivers/usb/serial/metro-usb.c
1974 index cc84da8dbb84..14511d6a7d44 100644
1975 --- a/drivers/usb/serial/metro-usb.c
1976 +++ b/drivers/usb/serial/metro-usb.c
1977 @@ -45,6 +45,7 @@ struct metrousb_private {
1978 static const struct usb_device_id id_table[] = {
1979 { USB_DEVICE(FOCUS_VENDOR_ID, FOCUS_PRODUCT_ID_BI) },
1980 { USB_DEVICE(FOCUS_VENDOR_ID, FOCUS_PRODUCT_ID_UNI) },
1981 + { USB_DEVICE_INTERFACE_CLASS(0x0c2e, 0x0730, 0xff) }, /* MS7820 */
1982 { }, /* Terminating entry. */
1983 };
1984 MODULE_DEVICE_TABLE(usb, id_table);
1985 diff --git a/fs/crypto/keyinfo.c b/fs/crypto/keyinfo.c
1986 index 018c588c7ac3..8e704d12a1cf 100644
1987 --- a/fs/crypto/keyinfo.c
1988 +++ b/fs/crypto/keyinfo.c
1989 @@ -109,6 +109,11 @@ static int validate_user_key(struct fscrypt_info *crypt_info,
1990 goto out;
1991 }
1992 ukp = user_key_payload_locked(keyring_key);
1993 + if (!ukp) {
1994 + /* key was revoked before we acquired its semaphore */
1995 + res = -EKEYREVOKED;
1996 + goto out;
1997 + }
1998 if (ukp->datalen != sizeof(struct fscrypt_key)) {
1999 res = -EINVAL;
2000 goto out;
2001 diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h
2002 index 9c351bf757b2..3fbc0ff79699 100644
2003 --- a/fs/ecryptfs/ecryptfs_kernel.h
2004 +++ b/fs/ecryptfs/ecryptfs_kernel.h
2005 @@ -84,11 +84,16 @@ struct ecryptfs_page_crypt_context {
2006 static inline struct ecryptfs_auth_tok *
2007 ecryptfs_get_encrypted_key_payload_data(struct key *key)
2008 {
2009 - if (key->type == &key_type_encrypted)
2010 - return (struct ecryptfs_auth_tok *)
2011 - (&((struct encrypted_key_payload *)key->payload.data[0])->payload_data);
2012 - else
2013 + struct encrypted_key_payload *payload;
2014 +
2015 + if (key->type != &key_type_encrypted)
2016 return NULL;
2017 +
2018 + payload = key->payload.data[0];
2019 + if (!payload)
2020 + return ERR_PTR(-EKEYREVOKED);
2021 +
2022 + return (struct ecryptfs_auth_tok *)payload->payload_data;
2023 }
2024
2025 static inline struct key *ecryptfs_get_encrypted_key(char *sig)
2026 @@ -114,12 +119,17 @@ static inline struct ecryptfs_auth_tok *
2027 ecryptfs_get_key_payload_data(struct key *key)
2028 {
2029 struct ecryptfs_auth_tok *auth_tok;
2030 + struct user_key_payload *ukp;
2031
2032 auth_tok = ecryptfs_get_encrypted_key_payload_data(key);
2033 - if (!auth_tok)
2034 - return (struct ecryptfs_auth_tok *)user_key_payload_locked(key)->data;
2035 - else
2036 + if (auth_tok)
2037 return auth_tok;
2038 +
2039 + ukp = user_key_payload_locked(key);
2040 + if (!ukp)
2041 + return ERR_PTR(-EKEYREVOKED);
2042 +
2043 + return (struct ecryptfs_auth_tok *)ukp->data;
2044 }
2045
2046 #define ECRYPTFS_MAX_KEYSET_SIZE 1024
2047 diff --git a/fs/ecryptfs/keystore.c b/fs/ecryptfs/keystore.c
2048 index 3cf1546dca82..fa218cd64f74 100644
2049 --- a/fs/ecryptfs/keystore.c
2050 +++ b/fs/ecryptfs/keystore.c
2051 @@ -459,7 +459,8 @@ static int ecryptfs_verify_version(u16 version)
2052 * @auth_tok_key: key containing the authentication token
2053 * @auth_tok: authentication token
2054 *
2055 - * Returns zero on valid auth tok; -EINVAL otherwise
2056 + * Returns zero on valid auth tok; -EINVAL if the payload is invalid; or
2057 + * -EKEYREVOKED if the key was revoked before we acquired its semaphore.
2058 */
2059 static int
2060 ecryptfs_verify_auth_tok_from_key(struct key *auth_tok_key,
2061 @@ -468,6 +469,12 @@ ecryptfs_verify_auth_tok_from_key(struct key *auth_tok_key,
2062 int rc = 0;
2063
2064 (*auth_tok) = ecryptfs_get_key_payload_data(auth_tok_key);
2065 + if (IS_ERR(*auth_tok)) {
2066 + rc = PTR_ERR(*auth_tok);
2067 + *auth_tok = NULL;
2068 + goto out;
2069 + }
2070 +
2071 if (ecryptfs_verify_version((*auth_tok)->version)) {
2072 printk(KERN_ERR "Data structure version mismatch. Userspace "
2073 "tools must match eCryptfs kernel module with major "
2074 diff --git a/fs/fscache/object-list.c b/fs/fscache/object-list.c
2075 index 67f940892ef8..5eb2e24ce790 100644
2076 --- a/fs/fscache/object-list.c
2077 +++ b/fs/fscache/object-list.c
2078 @@ -330,6 +330,13 @@ static void fscache_objlist_config(struct fscache_objlist_data *data)
2079 rcu_read_lock();
2080
2081 confkey = user_key_payload_rcu(key);
2082 + if (!confkey) {
2083 + /* key was revoked */
2084 + rcu_read_unlock();
2085 + key_put(key);
2086 + goto no_config;
2087 + }
2088 +
2089 buf = confkey->data;
2090
2091 for (len = confkey->datalen - 1; len >= 0; len--) {
2092 diff --git a/fs/iomap.c b/fs/iomap.c
2093 index 59cc98ad7577..b8a91064abc6 100644
2094 --- a/fs/iomap.c
2095 +++ b/fs/iomap.c
2096 @@ -993,6 +993,13 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
2097 WARN_ON_ONCE(ret);
2098 ret = 0;
2099
2100 + if (iov_iter_rw(iter) == WRITE && !is_sync_kiocb(iocb) &&
2101 + !inode->i_sb->s_dio_done_wq) {
2102 + ret = sb_init_dio_done_wq(inode->i_sb);
2103 + if (ret < 0)
2104 + goto out_free_dio;
2105 + }
2106 +
2107 inode_dio_begin(inode);
2108
2109 blk_start_plug(&plug);
2110 @@ -1015,13 +1022,6 @@ iomap_dio_rw(struct kiocb *iocb, struct iov_iter *iter,
2111 if (ret < 0)
2112 iomap_dio_set_error(dio, ret);
2113
2114 - if (ret >= 0 && iov_iter_rw(iter) == WRITE && !is_sync_kiocb(iocb) &&
2115 - !inode->i_sb->s_dio_done_wq) {
2116 - ret = sb_init_dio_done_wq(inode->i_sb);
2117 - if (ret < 0)
2118 - iomap_dio_set_error(dio, ret);
2119 - }
2120 -
2121 if (!atomic_dec_and_test(&dio->ref)) {
2122 if (!is_sync_kiocb(iocb))
2123 return -EIOCBQUEUED;
2124 diff --git a/fs/xfs/libxfs/xfs_ag_resv.c b/fs/xfs/libxfs/xfs_ag_resv.c
2125 index b008ff3250eb..df3e600835e8 100644
2126 --- a/fs/xfs/libxfs/xfs_ag_resv.c
2127 +++ b/fs/xfs/libxfs/xfs_ag_resv.c
2128 @@ -156,7 +156,8 @@ __xfs_ag_resv_free(
2129 trace_xfs_ag_resv_free(pag, type, 0);
2130
2131 resv = xfs_perag_resv(pag, type);
2132 - pag->pag_mount->m_ag_max_usable += resv->ar_asked;
2133 + if (pag->pag_agno == 0)
2134 + pag->pag_mount->m_ag_max_usable += resv->ar_asked;
2135 /*
2136 * AGFL blocks are always considered "free", so whatever
2137 * was reserved at mount time must be given back at umount.
2138 @@ -216,7 +217,14 @@ __xfs_ag_resv_init(
2139 return error;
2140 }
2141
2142 - mp->m_ag_max_usable -= ask;
2143 + /*
2144 + * Reduce the maximum per-AG allocation length by however much we're
2145 + * trying to reserve for an AG. Since this is a filesystem-wide
2146 + * counter, we only make the adjustment for AG 0. This assumes that
2147 + * there aren't any AGs hungrier for per-AG reservation than AG 0.
2148 + */
2149 + if (pag->pag_agno == 0)
2150 + mp->m_ag_max_usable -= ask;
2151
2152 resv = xfs_perag_resv(pag, type);
2153 resv->ar_asked = ask;
2154 diff --git a/fs/xfs/libxfs/xfs_alloc.c b/fs/xfs/libxfs/xfs_alloc.c
2155 index 744dcaec34cc..f965ce832bc0 100644
2156 --- a/fs/xfs/libxfs/xfs_alloc.c
2157 +++ b/fs/xfs/libxfs/xfs_alloc.c
2158 @@ -1584,6 +1584,10 @@ xfs_alloc_ag_vextent_small(
2159
2160 bp = xfs_btree_get_bufs(args->mp, args->tp,
2161 args->agno, fbno, 0);
2162 + if (!bp) {
2163 + error = -EFSCORRUPTED;
2164 + goto error0;
2165 + }
2166 xfs_trans_binval(args->tp, bp);
2167 }
2168 args->len = 1;
2169 @@ -2141,6 +2145,10 @@ xfs_alloc_fix_freelist(
2170 if (error)
2171 goto out_agbp_relse;
2172 bp = xfs_btree_get_bufs(mp, tp, args->agno, bno, 0);
2173 + if (!bp) {
2174 + error = -EFSCORRUPTED;
2175 + goto out_agbp_relse;
2176 + }
2177 xfs_trans_binval(tp, bp);
2178 }
2179
2180 diff --git a/fs/xfs/libxfs/xfs_bmap.c b/fs/xfs/libxfs/xfs_bmap.c
2181 index 6f2a5baded76..5c6eb19664f2 100644
2182 --- a/fs/xfs/libxfs/xfs_bmap.c
2183 +++ b/fs/xfs/libxfs/xfs_bmap.c
2184 @@ -3860,6 +3860,17 @@ xfs_trim_extent(
2185 }
2186 }
2187
2188 +/* trim extent to within eof */
2189 +void
2190 +xfs_trim_extent_eof(
2191 + struct xfs_bmbt_irec *irec,
2192 + struct xfs_inode *ip)
2193 +
2194 +{
2195 + xfs_trim_extent(irec, 0, XFS_B_TO_FSB(ip->i_mount,
2196 + i_size_read(VFS_I(ip))));
2197 +}
2198 +
2199 /*
2200 * Trim the returned map to the required bounds
2201 */
2202 diff --git a/fs/xfs/libxfs/xfs_bmap.h b/fs/xfs/libxfs/xfs_bmap.h
2203 index 851982a5dfbc..502e0d8fb4ff 100644
2204 --- a/fs/xfs/libxfs/xfs_bmap.h
2205 +++ b/fs/xfs/libxfs/xfs_bmap.h
2206 @@ -208,6 +208,7 @@ void xfs_bmap_trace_exlist(struct xfs_inode *ip, xfs_extnum_t cnt,
2207
2208 void xfs_trim_extent(struct xfs_bmbt_irec *irec, xfs_fileoff_t bno,
2209 xfs_filblks_t len);
2210 +void xfs_trim_extent_eof(struct xfs_bmbt_irec *, struct xfs_inode *);
2211 int xfs_bmap_add_attrfork(struct xfs_inode *ip, int size, int rsvd);
2212 void xfs_bmap_local_to_extents_empty(struct xfs_inode *ip, int whichfork);
2213 void xfs_bmap_add_free(struct xfs_mount *mp, struct xfs_defer_ops *dfops,
2214 diff --git a/fs/xfs/libxfs/xfs_log_format.h b/fs/xfs/libxfs/xfs_log_format.h
2215 index 8372e9bcd7b6..71de185735e0 100644
2216 --- a/fs/xfs/libxfs/xfs_log_format.h
2217 +++ b/fs/xfs/libxfs/xfs_log_format.h
2218 @@ -270,6 +270,7 @@ typedef struct xfs_inode_log_format {
2219 uint32_t ilf_fields; /* flags for fields logged */
2220 uint16_t ilf_asize; /* size of attr d/ext/root */
2221 uint16_t ilf_dsize; /* size of data/ext/root */
2222 + uint32_t ilf_pad; /* pad for 64 bit boundary */
2223 uint64_t ilf_ino; /* inode number */
2224 union {
2225 uint32_t ilfu_rdev; /* rdev value for dev inode*/
2226 @@ -280,29 +281,17 @@ typedef struct xfs_inode_log_format {
2227 int32_t ilf_boffset; /* off of inode in buffer */
2228 } xfs_inode_log_format_t;
2229
2230 -typedef struct xfs_inode_log_format_32 {
2231 - uint16_t ilf_type; /* inode log item type */
2232 - uint16_t ilf_size; /* size of this item */
2233 - uint32_t ilf_fields; /* flags for fields logged */
2234 - uint16_t ilf_asize; /* size of attr d/ext/root */
2235 - uint16_t ilf_dsize; /* size of data/ext/root */
2236 - uint64_t ilf_ino; /* inode number */
2237 - union {
2238 - uint32_t ilfu_rdev; /* rdev value for dev inode*/
2239 - uuid_t ilfu_uuid; /* mount point value */
2240 - } ilf_u;
2241 - int64_t ilf_blkno; /* blkno of inode buffer */
2242 - int32_t ilf_len; /* len of inode buffer */
2243 - int32_t ilf_boffset; /* off of inode in buffer */
2244 -} __attribute__((packed)) xfs_inode_log_format_32_t;
2245 -
2246 -typedef struct xfs_inode_log_format_64 {
2247 +/*
2248 + * Old 32 bit systems will log in this format without the 64 bit
2249 + * alignment padding. Recovery will detect this and convert it to the
2250 + * correct format.
2251 + */
2252 +struct xfs_inode_log_format_32 {
2253 uint16_t ilf_type; /* inode log item type */
2254 uint16_t ilf_size; /* size of this item */
2255 uint32_t ilf_fields; /* flags for fields logged */
2256 uint16_t ilf_asize; /* size of attr d/ext/root */
2257 uint16_t ilf_dsize; /* size of data/ext/root */
2258 - uint32_t ilf_pad; /* pad for 64 bit boundary */
2259 uint64_t ilf_ino; /* inode number */
2260 union {
2261 uint32_t ilfu_rdev; /* rdev value for dev inode*/
2262 @@ -311,7 +300,7 @@ typedef struct xfs_inode_log_format_64 {
2263 int64_t ilf_blkno; /* blkno of inode buffer */
2264 int32_t ilf_len; /* len of inode buffer */
2265 int32_t ilf_boffset; /* off of inode in buffer */
2266 -} xfs_inode_log_format_64_t;
2267 +} __attribute__((packed));
2268
2269
2270 /*
2271 diff --git a/fs/xfs/xfs_acl.c b/fs/xfs/xfs_acl.c
2272 index 7034e17535de..3354140de07e 100644
2273 --- a/fs/xfs/xfs_acl.c
2274 +++ b/fs/xfs/xfs_acl.c
2275 @@ -247,6 +247,8 @@ xfs_set_mode(struct inode *inode, umode_t mode)
2276 int
2277 xfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
2278 {
2279 + umode_t mode;
2280 + bool set_mode = false;
2281 int error = 0;
2282
2283 if (!acl)
2284 @@ -257,16 +259,24 @@ xfs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
2285 return error;
2286
2287 if (type == ACL_TYPE_ACCESS) {
2288 - umode_t mode;
2289 -
2290 error = posix_acl_update_mode(inode, &mode, &acl);
2291 if (error)
2292 return error;
2293 - error = xfs_set_mode(inode, mode);
2294 - if (error)
2295 - return error;
2296 + set_mode = true;
2297 }
2298
2299 set_acl:
2300 - return __xfs_set_acl(inode, acl, type);
2301 + error = __xfs_set_acl(inode, acl, type);
2302 + if (error)
2303 + return error;
2304 +
2305 + /*
2306 + * We set the mode after successfully updating the ACL xattr because the
2307 + * xattr update can fail at ENOSPC and we don't want to change the mode
2308 + * if the ACL update hasn't been applied.
2309 + */
2310 + if (set_mode)
2311 + error = xfs_set_mode(inode, mode);
2312 +
2313 + return error;
2314 }
2315 diff --git a/fs/xfs/xfs_aops.c b/fs/xfs/xfs_aops.c
2316 index f9efd67f6fa1..41b767ecfe50 100644
2317 --- a/fs/xfs/xfs_aops.c
2318 +++ b/fs/xfs/xfs_aops.c
2319 @@ -330,7 +330,8 @@ xfs_end_io(
2320 error = xfs_reflink_end_cow(ip, offset, size);
2321 break;
2322 case XFS_IO_UNWRITTEN:
2323 - error = xfs_iomap_write_unwritten(ip, offset, size);
2324 + /* writeback should never update isize */
2325 + error = xfs_iomap_write_unwritten(ip, offset, size, false);
2326 break;
2327 default:
2328 ASSERT(!xfs_ioend_is_append(ioend) || ioend->io_append_trans);
2329 @@ -432,6 +433,19 @@ xfs_imap_valid(
2330 {
2331 offset >>= inode->i_blkbits;
2332
2333 + /*
2334 + * We have to make sure the cached mapping is within EOF to protect
2335 + * against eofblocks trimming on file release leaving us with a stale
2336 + * mapping. Otherwise, a page for a subsequent file extending buffered
2337 + * write could get picked up by this writeback cycle and written to the
2338 + * wrong blocks.
2339 + *
2340 + * Note that what we really want here is a generic mapping invalidation
2341 + * mechanism to protect us from arbitrary extent modifying contexts, not
2342 + * just eofblocks.
2343 + */
2344 + xfs_trim_extent_eof(imap, XFS_I(inode));
2345 +
2346 return offset >= imap->br_startoff &&
2347 offset < imap->br_startoff + imap->br_blockcount;
2348 }
2349 @@ -721,6 +735,14 @@ xfs_vm_invalidatepage(
2350 {
2351 trace_xfs_invalidatepage(page->mapping->host, page, offset,
2352 length);
2353 +
2354 + /*
2355 + * If we are invalidating the entire page, clear the dirty state from it
2356 + * so that we can check for attempts to release dirty cached pages in
2357 + * xfs_vm_releasepage().
2358 + */
2359 + if (offset == 0 && length >= PAGE_SIZE)
2360 + cancel_dirty_page(page);
2361 block_invalidatepage(page, offset, length);
2362 }
2363
2364 @@ -1176,25 +1198,27 @@ xfs_vm_releasepage(
2365 * mm accommodates an old ext3 case where clean pages might not have had
2366 * the dirty bit cleared. Thus, it can send actual dirty pages to
2367 * ->releasepage() via shrink_active_list(). Conversely,
2368 - * block_invalidatepage() can send pages that are still marked dirty
2369 - * but otherwise have invalidated buffers.
2370 + * block_invalidatepage() can send pages that are still marked dirty but
2371 + * otherwise have invalidated buffers.
2372 *
2373 * We want to release the latter to avoid unnecessary buildup of the
2374 - * LRU, skip the former and warn if we've left any lingering
2375 - * delalloc/unwritten buffers on clean pages. Skip pages with delalloc
2376 - * or unwritten buffers and warn if the page is not dirty. Otherwise
2377 - * try to release the buffers.
2378 + * LRU, so xfs_vm_invalidatepage() clears the page dirty flag on pages
2379 + * that are entirely invalidated and need to be released. Hence the
2380 + * only time we should get dirty pages here is through
2381 + * shrink_active_list() and so we can simply skip those now.
2382 + *
2383 + * warn if we've left any lingering delalloc/unwritten buffers on clean
2384 + * or invalidated pages we are about to release.
2385 */
2386 + if (PageDirty(page))
2387 + return 0;
2388 +
2389 xfs_count_page_state(page, &delalloc, &unwritten);
2390
2391 - if (delalloc) {
2392 - WARN_ON_ONCE(!PageDirty(page));
2393 + if (WARN_ON_ONCE(delalloc))
2394 return 0;
2395 - }
2396 - if (unwritten) {
2397 - WARN_ON_ONCE(!PageDirty(page));
2398 + if (WARN_ON_ONCE(unwritten))
2399 return 0;
2400 - }
2401
2402 return try_to_free_buffers(page);
2403 }
2404 diff --git a/fs/xfs/xfs_attr_inactive.c b/fs/xfs/xfs_attr_inactive.c
2405 index be0b79d8900f..c6643004e583 100644
2406 --- a/fs/xfs/xfs_attr_inactive.c
2407 +++ b/fs/xfs/xfs_attr_inactive.c
2408 @@ -302,6 +302,8 @@ xfs_attr3_node_inactive(
2409 &bp, XFS_ATTR_FORK);
2410 if (error)
2411 return error;
2412 + node = bp->b_addr;
2413 + btree = dp->d_ops->node_tree_p(node);
2414 child_fsb = be32_to_cpu(btree[i + 1].before);
2415 xfs_trans_brelse(*trans, bp);
2416 }
2417 diff --git a/fs/xfs/xfs_bmap_util.c b/fs/xfs/xfs_bmap_util.c
2418 index 3e9b7a4fb8fd..799c69a72f2c 100644
2419 --- a/fs/xfs/xfs_bmap_util.c
2420 +++ b/fs/xfs/xfs_bmap_util.c
2421 @@ -84,6 +84,7 @@ xfs_zero_extent(
2422 GFP_NOFS, 0);
2423 }
2424
2425 +#ifdef CONFIG_XFS_RT
2426 int
2427 xfs_bmap_rtalloc(
2428 struct xfs_bmalloca *ap) /* bmap alloc argument struct */
2429 @@ -190,6 +191,7 @@ xfs_bmap_rtalloc(
2430 }
2431 return 0;
2432 }
2433 +#endif /* CONFIG_XFS_RT */
2434
2435 /*
2436 * Check if the endoff is outside the last extent. If so the caller will grow
2437 @@ -1459,7 +1461,19 @@ xfs_shift_file_space(
2438 return error;
2439
2440 /*
2441 - * The extent shiting code works on extent granularity. So, if
2442 + * Clean out anything hanging around in the cow fork now that
2443 + * we've flushed all the dirty data out to disk to avoid having
2444 + * CoW extents at the wrong offsets.
2445 + */
2446 + if (xfs_is_reflink_inode(ip)) {
2447 + error = xfs_reflink_cancel_cow_range(ip, offset, NULLFILEOFF,
2448 + true);
2449 + if (error)
2450 + return error;
2451 + }
2452 +
2453 + /*
2454 + * The extent shifting code works on extent granularity. So, if
2455 * stop_fsb is not the starting block of extent, we need to split
2456 * the extent at stop_fsb.
2457 */
2458 @@ -2109,11 +2123,31 @@ xfs_swap_extents(
2459 ip->i_d.di_flags2 |= tip->i_d.di_flags2 & XFS_DIFLAG2_REFLINK;
2460 tip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK;
2461 tip->i_d.di_flags2 |= f & XFS_DIFLAG2_REFLINK;
2462 + }
2463 +
2464 + /* Swap the cow forks. */
2465 + if (xfs_sb_version_hasreflink(&mp->m_sb)) {
2466 + xfs_extnum_t extnum;
2467 +
2468 + ASSERT(ip->i_cformat == XFS_DINODE_FMT_EXTENTS);
2469 + ASSERT(tip->i_cformat == XFS_DINODE_FMT_EXTENTS);
2470 +
2471 + extnum = ip->i_cnextents;
2472 + ip->i_cnextents = tip->i_cnextents;
2473 + tip->i_cnextents = extnum;
2474 +
2475 cowfp = ip->i_cowfp;
2476 ip->i_cowfp = tip->i_cowfp;
2477 tip->i_cowfp = cowfp;
2478 - xfs_inode_set_cowblocks_tag(ip);
2479 - xfs_inode_set_cowblocks_tag(tip);
2480 +
2481 + if (ip->i_cowfp && ip->i_cnextents)
2482 + xfs_inode_set_cowblocks_tag(ip);
2483 + else
2484 + xfs_inode_clear_cowblocks_tag(ip);
2485 + if (tip->i_cowfp && tip->i_cnextents)
2486 + xfs_inode_set_cowblocks_tag(tip);
2487 + else
2488 + xfs_inode_clear_cowblocks_tag(tip);
2489 }
2490
2491 xfs_trans_log_inode(tp, ip, src_log_flags);
2492 diff --git a/fs/xfs/xfs_bmap_util.h b/fs/xfs/xfs_bmap_util.h
2493 index 0cede1043571..fb8d0c7d1db8 100644
2494 --- a/fs/xfs/xfs_bmap_util.h
2495 +++ b/fs/xfs/xfs_bmap_util.h
2496 @@ -28,7 +28,20 @@ struct xfs_mount;
2497 struct xfs_trans;
2498 struct xfs_bmalloca;
2499
2500 +#ifdef CONFIG_XFS_RT
2501 int xfs_bmap_rtalloc(struct xfs_bmalloca *ap);
2502 +#else /* !CONFIG_XFS_RT */
2503 +/*
2504 + * Attempts to allocate RT extents when RT is disable indicates corruption and
2505 + * should trigger a shutdown.
2506 + */
2507 +static inline int
2508 +xfs_bmap_rtalloc(struct xfs_bmalloca *ap)
2509 +{
2510 + return -EFSCORRUPTED;
2511 +}
2512 +#endif /* CONFIG_XFS_RT */
2513 +
2514 int xfs_bmap_eof(struct xfs_inode *ip, xfs_fileoff_t endoff,
2515 int whichfork, int *eof);
2516 int xfs_bmap_punch_delalloc_range(struct xfs_inode *ip,
2517 diff --git a/fs/xfs/xfs_error.c b/fs/xfs/xfs_error.c
2518 index 2f4feb959bfb..028e50a36f95 100644
2519 --- a/fs/xfs/xfs_error.c
2520 +++ b/fs/xfs/xfs_error.c
2521 @@ -344,7 +344,7 @@ xfs_verifier_error(
2522 {
2523 struct xfs_mount *mp = bp->b_target->bt_mount;
2524
2525 - xfs_alert(mp, "Metadata %s detected at %pF, %s block 0x%llx",
2526 + xfs_alert(mp, "Metadata %s detected at %pS, %s block 0x%llx",
2527 bp->b_error == -EFSBADCRC ? "CRC error" : "corruption",
2528 __return_address, bp->b_ops->name, bp->b_bn);
2529
2530 diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
2531 index c4893e226fd8..ad5100ce8c44 100644
2532 --- a/fs/xfs/xfs_file.c
2533 +++ b/fs/xfs/xfs_file.c
2534 @@ -58,7 +58,7 @@ xfs_zero_range(
2535 xfs_off_t count,
2536 bool *did_zero)
2537 {
2538 - return iomap_zero_range(VFS_I(ip), pos, count, NULL, &xfs_iomap_ops);
2539 + return iomap_zero_range(VFS_I(ip), pos, count, did_zero, &xfs_iomap_ops);
2540 }
2541
2542 int
2543 @@ -432,7 +432,6 @@ xfs_dio_write_end_io(
2544 struct inode *inode = file_inode(iocb->ki_filp);
2545 struct xfs_inode *ip = XFS_I(inode);
2546 loff_t offset = iocb->ki_pos;
2547 - bool update_size = false;
2548 int error = 0;
2549
2550 trace_xfs_end_io_direct_write(ip, offset, size);
2551 @@ -443,6 +442,21 @@ xfs_dio_write_end_io(
2552 if (size <= 0)
2553 return size;
2554
2555 + if (flags & IOMAP_DIO_COW) {
2556 + error = xfs_reflink_end_cow(ip, offset, size);
2557 + if (error)
2558 + return error;
2559 + }
2560 +
2561 + /*
2562 + * Unwritten conversion updates the in-core isize after extent
2563 + * conversion but before updating the on-disk size. Updating isize any
2564 + * earlier allows a racing dio read to find unwritten extents before
2565 + * they are converted.
2566 + */
2567 + if (flags & IOMAP_DIO_UNWRITTEN)
2568 + return xfs_iomap_write_unwritten(ip, offset, size, true);
2569 +
2570 /*
2571 * We need to update the in-core inode size here so that we don't end up
2572 * with the on-disk inode size being outside the in-core inode size. We
2573 @@ -457,20 +471,11 @@ xfs_dio_write_end_io(
2574 spin_lock(&ip->i_flags_lock);
2575 if (offset + size > i_size_read(inode)) {
2576 i_size_write(inode, offset + size);
2577 - update_size = true;
2578 - }
2579 - spin_unlock(&ip->i_flags_lock);
2580 -
2581 - if (flags & IOMAP_DIO_COW) {
2582 - error = xfs_reflink_end_cow(ip, offset, size);
2583 - if (error)
2584 - return error;
2585 - }
2586 -
2587 - if (flags & IOMAP_DIO_UNWRITTEN)
2588 - error = xfs_iomap_write_unwritten(ip, offset, size);
2589 - else if (update_size)
2590 + spin_unlock(&ip->i_flags_lock);
2591 error = xfs_setfilesize(ip, offset, size);
2592 + } else {
2593 + spin_unlock(&ip->i_flags_lock);
2594 + }
2595
2596 return error;
2597 }
2598 diff --git a/fs/xfs/xfs_fsmap.c b/fs/xfs/xfs_fsmap.c
2599 index 814ed729881d..43cfc07996a4 100644
2600 --- a/fs/xfs/xfs_fsmap.c
2601 +++ b/fs/xfs/xfs_fsmap.c
2602 @@ -367,29 +367,6 @@ xfs_getfsmap_datadev_helper(
2603 return xfs_getfsmap_helper(cur->bc_tp, info, rec, rec_daddr);
2604 }
2605
2606 -/* Transform a rtbitmap "record" into a fsmap */
2607 -STATIC int
2608 -xfs_getfsmap_rtdev_rtbitmap_helper(
2609 - struct xfs_trans *tp,
2610 - struct xfs_rtalloc_rec *rec,
2611 - void *priv)
2612 -{
2613 - struct xfs_mount *mp = tp->t_mountp;
2614 - struct xfs_getfsmap_info *info = priv;
2615 - struct xfs_rmap_irec irec;
2616 - xfs_daddr_t rec_daddr;
2617 -
2618 - rec_daddr = XFS_FSB_TO_BB(mp, rec->ar_startblock);
2619 -
2620 - irec.rm_startblock = rec->ar_startblock;
2621 - irec.rm_blockcount = rec->ar_blockcount;
2622 - irec.rm_owner = XFS_RMAP_OWN_NULL; /* "free" */
2623 - irec.rm_offset = 0;
2624 - irec.rm_flags = 0;
2625 -
2626 - return xfs_getfsmap_helper(tp, info, &irec, rec_daddr);
2627 -}
2628 -
2629 /* Transform a bnobt irec into a fsmap */
2630 STATIC int
2631 xfs_getfsmap_datadev_bnobt_helper(
2632 @@ -475,6 +452,30 @@ xfs_getfsmap_logdev(
2633 return xfs_getfsmap_helper(tp, info, &rmap, 0);
2634 }
2635
2636 +#ifdef CONFIG_XFS_RT
2637 +/* Transform a rtbitmap "record" into a fsmap */
2638 +STATIC int
2639 +xfs_getfsmap_rtdev_rtbitmap_helper(
2640 + struct xfs_trans *tp,
2641 + struct xfs_rtalloc_rec *rec,
2642 + void *priv)
2643 +{
2644 + struct xfs_mount *mp = tp->t_mountp;
2645 + struct xfs_getfsmap_info *info = priv;
2646 + struct xfs_rmap_irec irec;
2647 + xfs_daddr_t rec_daddr;
2648 +
2649 + rec_daddr = XFS_FSB_TO_BB(mp, rec->ar_startblock);
2650 +
2651 + irec.rm_startblock = rec->ar_startblock;
2652 + irec.rm_blockcount = rec->ar_blockcount;
2653 + irec.rm_owner = XFS_RMAP_OWN_NULL; /* "free" */
2654 + irec.rm_offset = 0;
2655 + irec.rm_flags = 0;
2656 +
2657 + return xfs_getfsmap_helper(tp, info, &irec, rec_daddr);
2658 +}
2659 +
2660 /* Execute a getfsmap query against the realtime device. */
2661 STATIC int
2662 __xfs_getfsmap_rtdev(
2663 @@ -561,6 +562,7 @@ xfs_getfsmap_rtdev_rtbitmap(
2664 return __xfs_getfsmap_rtdev(tp, keys, xfs_getfsmap_rtdev_rtbitmap_query,
2665 info);
2666 }
2667 +#endif /* CONFIG_XFS_RT */
2668
2669 /* Execute a getfsmap query against the regular data device. */
2670 STATIC int
2671 @@ -795,7 +797,15 @@ xfs_getfsmap_check_keys(
2672 return false;
2673 }
2674
2675 +/*
2676 + * There are only two devices if we didn't configure RT devices at build time.
2677 + */
2678 +#ifdef CONFIG_XFS_RT
2679 #define XFS_GETFSMAP_DEVS 3
2680 +#else
2681 +#define XFS_GETFSMAP_DEVS 2
2682 +#endif /* CONFIG_XFS_RT */
2683 +
2684 /*
2685 * Get filesystem's extents as described in head, and format for
2686 * output. Calls formatter to fill the user's buffer until all
2687 @@ -853,10 +863,12 @@ xfs_getfsmap(
2688 handlers[1].dev = new_encode_dev(mp->m_logdev_targp->bt_dev);
2689 handlers[1].fn = xfs_getfsmap_logdev;
2690 }
2691 +#ifdef CONFIG_XFS_RT
2692 if (mp->m_rtdev_targp) {
2693 handlers[2].dev = new_encode_dev(mp->m_rtdev_targp->bt_dev);
2694 handlers[2].fn = xfs_getfsmap_rtdev_rtbitmap;
2695 }
2696 +#endif /* CONFIG_XFS_RT */
2697
2698 xfs_sort(handlers, XFS_GETFSMAP_DEVS, sizeof(struct xfs_getfsmap_dev),
2699 xfs_getfsmap_dev_compare);
2700 diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c
2701 index 97045e8dfed5..cd2e5b122b01 100644
2702 --- a/fs/xfs/xfs_inode.c
2703 +++ b/fs/xfs/xfs_inode.c
2704 @@ -1623,10 +1623,12 @@ xfs_itruncate_extents(
2705 goto out;
2706
2707 /*
2708 - * Clear the reflink flag if we truncated everything.
2709 + * Clear the reflink flag if there are no data fork blocks and
2710 + * there are no extents staged in the cow fork.
2711 */
2712 - if (ip->i_d.di_nblocks == 0 && xfs_is_reflink_inode(ip)) {
2713 - ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK;
2714 + if (xfs_is_reflink_inode(ip) && ip->i_cnextents == 0) {
2715 + if (ip->i_d.di_nblocks == 0)
2716 + ip->i_d.di_flags2 &= ~XFS_DIFLAG2_REFLINK;
2717 xfs_inode_clear_cowblocks_tag(ip);
2718 }
2719
2720 diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c
2721 index 6d0f74ec31e8..9bbc2d7cc8cb 100644
2722 --- a/fs/xfs/xfs_inode_item.c
2723 +++ b/fs/xfs/xfs_inode_item.c
2724 @@ -364,6 +364,9 @@ xfs_inode_to_log_dinode(
2725 to->di_dmstate = from->di_dmstate;
2726 to->di_flags = from->di_flags;
2727
2728 + /* log a dummy value to ensure log structure is fully initialised */
2729 + to->di_next_unlinked = NULLAGINO;
2730 +
2731 if (from->di_version == 3) {
2732 to->di_changecount = inode->i_version;
2733 to->di_crtime.t_sec = from->di_crtime.t_sec;
2734 @@ -404,6 +407,11 @@ xfs_inode_item_format_core(
2735 * the second with the on-disk inode structure, and a possible third and/or
2736 * fourth with the inode data/extents/b-tree root and inode attributes
2737 * data/extents/b-tree root.
2738 + *
2739 + * Note: Always use the 64 bit inode log format structure so we don't
2740 + * leave an uninitialised hole in the format item on 64 bit systems. Log
2741 + * recovery on 32 bit systems handles this just fine, so there's no reason
2742 + * for not using an initialising the properly padded structure all the time.
2743 */
2744 STATIC void
2745 xfs_inode_item_format(
2746 @@ -412,8 +420,8 @@ xfs_inode_item_format(
2747 {
2748 struct xfs_inode_log_item *iip = INODE_ITEM(lip);
2749 struct xfs_inode *ip = iip->ili_inode;
2750 - struct xfs_inode_log_format *ilf;
2751 struct xfs_log_iovec *vecp = NULL;
2752 + struct xfs_inode_log_format *ilf;
2753
2754 ASSERT(ip->i_d.di_version > 1);
2755
2756 @@ -425,7 +433,17 @@ xfs_inode_item_format(
2757 ilf->ilf_boffset = ip->i_imap.im_boffset;
2758 ilf->ilf_fields = XFS_ILOG_CORE;
2759 ilf->ilf_size = 2; /* format + core */
2760 - xlog_finish_iovec(lv, vecp, sizeof(struct xfs_inode_log_format));
2761 +
2762 + /*
2763 + * make sure we don't leak uninitialised data into the log in the case
2764 + * when we don't log every field in the inode.
2765 + */
2766 + ilf->ilf_dsize = 0;
2767 + ilf->ilf_asize = 0;
2768 + ilf->ilf_pad = 0;
2769 + uuid_copy(&ilf->ilf_u.ilfu_uuid, &uuid_null);
2770 +
2771 + xlog_finish_iovec(lv, vecp, sizeof(*ilf));
2772
2773 xfs_inode_item_format_core(ip, lv, &vecp);
2774 xfs_inode_item_format_data_fork(iip, ilf, lv, &vecp);
2775 @@ -745,7 +763,7 @@ xfs_iflush_done(
2776 */
2777 iip = INODE_ITEM(blip);
2778 if ((iip->ili_logged && blip->li_lsn == iip->ili_flush_lsn) ||
2779 - lip->li_flags & XFS_LI_FAILED)
2780 + (blip->li_flags & XFS_LI_FAILED))
2781 need_ail++;
2782
2783 blip = next;
2784 @@ -855,44 +873,29 @@ xfs_istale_done(
2785 }
2786
2787 /*
2788 - * convert an xfs_inode_log_format struct from either 32 or 64 bit versions
2789 - * (which can have different field alignments) to the native version
2790 + * convert an xfs_inode_log_format struct from the old 32 bit version
2791 + * (which can have different field alignments) to the native 64 bit version
2792 */
2793 int
2794 xfs_inode_item_format_convert(
2795 - xfs_log_iovec_t *buf,
2796 - xfs_inode_log_format_t *in_f)
2797 + struct xfs_log_iovec *buf,
2798 + struct xfs_inode_log_format *in_f)
2799 {
2800 - if (buf->i_len == sizeof(xfs_inode_log_format_32_t)) {
2801 - xfs_inode_log_format_32_t *in_f32 = buf->i_addr;
2802 -
2803 - in_f->ilf_type = in_f32->ilf_type;
2804 - in_f->ilf_size = in_f32->ilf_size;
2805 - in_f->ilf_fields = in_f32->ilf_fields;
2806 - in_f->ilf_asize = in_f32->ilf_asize;
2807 - in_f->ilf_dsize = in_f32->ilf_dsize;
2808 - in_f->ilf_ino = in_f32->ilf_ino;
2809 - /* copy biggest field of ilf_u */
2810 - uuid_copy(&in_f->ilf_u.ilfu_uuid, &in_f32->ilf_u.ilfu_uuid);
2811 - in_f->ilf_blkno = in_f32->ilf_blkno;
2812 - in_f->ilf_len = in_f32->ilf_len;
2813 - in_f->ilf_boffset = in_f32->ilf_boffset;
2814 - return 0;
2815 - } else if (buf->i_len == sizeof(xfs_inode_log_format_64_t)){
2816 - xfs_inode_log_format_64_t *in_f64 = buf->i_addr;
2817 -
2818 - in_f->ilf_type = in_f64->ilf_type;
2819 - in_f->ilf_size = in_f64->ilf_size;
2820 - in_f->ilf_fields = in_f64->ilf_fields;
2821 - in_f->ilf_asize = in_f64->ilf_asize;
2822 - in_f->ilf_dsize = in_f64->ilf_dsize;
2823 - in_f->ilf_ino = in_f64->ilf_ino;
2824 - /* copy biggest field of ilf_u */
2825 - uuid_copy(&in_f->ilf_u.ilfu_uuid, &in_f64->ilf_u.ilfu_uuid);
2826 - in_f->ilf_blkno = in_f64->ilf_blkno;
2827 - in_f->ilf_len = in_f64->ilf_len;
2828 - in_f->ilf_boffset = in_f64->ilf_boffset;
2829 - return 0;
2830 - }
2831 - return -EFSCORRUPTED;
2832 + struct xfs_inode_log_format_32 *in_f32 = buf->i_addr;
2833 +
2834 + if (buf->i_len != sizeof(*in_f32))
2835 + return -EFSCORRUPTED;
2836 +
2837 + in_f->ilf_type = in_f32->ilf_type;
2838 + in_f->ilf_size = in_f32->ilf_size;
2839 + in_f->ilf_fields = in_f32->ilf_fields;
2840 + in_f->ilf_asize = in_f32->ilf_asize;
2841 + in_f->ilf_dsize = in_f32->ilf_dsize;
2842 + in_f->ilf_ino = in_f32->ilf_ino;
2843 + /* copy biggest field of ilf_u */
2844 + uuid_copy(&in_f->ilf_u.ilfu_uuid, &in_f32->ilf_u.ilfu_uuid);
2845 + in_f->ilf_blkno = in_f32->ilf_blkno;
2846 + in_f->ilf_len = in_f32->ilf_len;
2847 + in_f->ilf_boffset = in_f32->ilf_boffset;
2848 + return 0;
2849 }
2850 diff --git a/fs/xfs/xfs_iomap.c b/fs/xfs/xfs_iomap.c
2851 index 813394c62849..2cef389d8955 100644
2852 --- a/fs/xfs/xfs_iomap.c
2853 +++ b/fs/xfs/xfs_iomap.c
2854 @@ -829,7 +829,8 @@ int
2855 xfs_iomap_write_unwritten(
2856 xfs_inode_t *ip,
2857 xfs_off_t offset,
2858 - xfs_off_t count)
2859 + xfs_off_t count,
2860 + bool update_isize)
2861 {
2862 xfs_mount_t *mp = ip->i_mount;
2863 xfs_fileoff_t offset_fsb;
2864 @@ -840,6 +841,7 @@ xfs_iomap_write_unwritten(
2865 xfs_trans_t *tp;
2866 xfs_bmbt_irec_t imap;
2867 struct xfs_defer_ops dfops;
2868 + struct inode *inode = VFS_I(ip);
2869 xfs_fsize_t i_size;
2870 uint resblks;
2871 int error;
2872 @@ -899,7 +901,8 @@ xfs_iomap_write_unwritten(
2873 i_size = XFS_FSB_TO_B(mp, offset_fsb + count_fsb);
2874 if (i_size > offset + count)
2875 i_size = offset + count;
2876 -
2877 + if (update_isize && i_size > i_size_read(inode))
2878 + i_size_write(inode, i_size);
2879 i_size = xfs_new_eof(ip, i_size);
2880 if (i_size) {
2881 ip->i_d.di_size = i_size;
2882 diff --git a/fs/xfs/xfs_iomap.h b/fs/xfs/xfs_iomap.h
2883 index 00db3ecea084..ee535065c5d0 100644
2884 --- a/fs/xfs/xfs_iomap.h
2885 +++ b/fs/xfs/xfs_iomap.h
2886 @@ -27,7 +27,7 @@ int xfs_iomap_write_direct(struct xfs_inode *, xfs_off_t, size_t,
2887 struct xfs_bmbt_irec *, int);
2888 int xfs_iomap_write_allocate(struct xfs_inode *, int, xfs_off_t,
2889 struct xfs_bmbt_irec *);
2890 -int xfs_iomap_write_unwritten(struct xfs_inode *, xfs_off_t, xfs_off_t);
2891 +int xfs_iomap_write_unwritten(struct xfs_inode *, xfs_off_t, xfs_off_t, bool);
2892
2893 void xfs_bmbt_to_iomap(struct xfs_inode *, struct iomap *,
2894 struct xfs_bmbt_irec *);
2895 diff --git a/fs/xfs/xfs_ondisk.h b/fs/xfs/xfs_ondisk.h
2896 index 0c381d71b242..0492436a053f 100644
2897 --- a/fs/xfs/xfs_ondisk.h
2898 +++ b/fs/xfs/xfs_ondisk.h
2899 @@ -134,7 +134,7 @@ xfs_check_ondisk_structs(void)
2900 XFS_CHECK_STRUCT_SIZE(struct xfs_icreate_log, 28);
2901 XFS_CHECK_STRUCT_SIZE(struct xfs_ictimestamp, 8);
2902 XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format_32, 52);
2903 - XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format_64, 56);
2904 + XFS_CHECK_STRUCT_SIZE(struct xfs_inode_log_format, 56);
2905 XFS_CHECK_STRUCT_SIZE(struct xfs_qoff_logformat, 20);
2906 XFS_CHECK_STRUCT_SIZE(struct xfs_trans_header, 16);
2907 }
2908 diff --git a/fs/xfs/xfs_pnfs.c b/fs/xfs/xfs_pnfs.c
2909 index 2f2dc3c09ad0..4246876df7b7 100644
2910 --- a/fs/xfs/xfs_pnfs.c
2911 +++ b/fs/xfs/xfs_pnfs.c
2912 @@ -274,7 +274,7 @@ xfs_fs_commit_blocks(
2913 (end - 1) >> PAGE_SHIFT);
2914 WARN_ON_ONCE(error);
2915
2916 - error = xfs_iomap_write_unwritten(ip, start, length);
2917 + error = xfs_iomap_write_unwritten(ip, start, length, false);
2918 if (error)
2919 goto out_drop_iolock;
2920 }
2921 diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c
2922 index f45fbf0db9bb..8c8390a7f121 100644
2923 --- a/fs/xfs/xfs_reflink.c
2924 +++ b/fs/xfs/xfs_reflink.c
2925 @@ -735,7 +735,13 @@ xfs_reflink_end_cow(
2926 /* If there is a hole at end_fsb - 1 go to the previous extent */
2927 if (!xfs_iext_lookup_extent(ip, ifp, end_fsb - 1, &idx, &got) ||
2928 got.br_startoff > end_fsb) {
2929 - ASSERT(idx > 0);
2930 + /*
2931 + * In case of racing, overlapping AIO writes no COW extents
2932 + * might be left by the time I/O completes for the loser of
2933 + * the race. In that case we are done.
2934 + */
2935 + if (idx <= 0)
2936 + goto out_cancel;
2937 xfs_iext_get_extent(ifp, --idx, &got);
2938 }
2939
2940 @@ -807,6 +813,7 @@ xfs_reflink_end_cow(
2941
2942 out_defer:
2943 xfs_defer_cancel(&dfops);
2944 +out_cancel:
2945 xfs_trans_cancel(tp);
2946 xfs_iunlock(ip, XFS_ILOCK_EXCL);
2947 out:
2948 diff --git a/include/linux/key.h b/include/linux/key.h
2949 index e315e16b6ff8..8a15cabe928d 100644
2950 --- a/include/linux/key.h
2951 +++ b/include/linux/key.h
2952 @@ -138,6 +138,11 @@ struct key_restriction {
2953 struct key_type *keytype;
2954 };
2955
2956 +enum key_state {
2957 + KEY_IS_UNINSTANTIATED,
2958 + KEY_IS_POSITIVE, /* Positively instantiated */
2959 +};
2960 +
2961 /*****************************************************************************/
2962 /*
2963 * authentication token / access credential / keyring
2964 @@ -169,6 +174,7 @@ struct key {
2965 * - may not match RCU dereferenced payload
2966 * - payload should contain own length
2967 */
2968 + short state; /* Key state (+) or rejection error (-) */
2969
2970 #ifdef KEY_DEBUGGING
2971 unsigned magic;
2972 @@ -176,18 +182,16 @@ struct key {
2973 #endif
2974
2975 unsigned long flags; /* status flags (change with bitops) */
2976 -#define KEY_FLAG_INSTANTIATED 0 /* set if key has been instantiated */
2977 -#define KEY_FLAG_DEAD 1 /* set if key type has been deleted */
2978 -#define KEY_FLAG_REVOKED 2 /* set if key had been revoked */
2979 -#define KEY_FLAG_IN_QUOTA 3 /* set if key consumes quota */
2980 -#define KEY_FLAG_USER_CONSTRUCT 4 /* set if key is being constructed in userspace */
2981 -#define KEY_FLAG_NEGATIVE 5 /* set if key is negative */
2982 -#define KEY_FLAG_ROOT_CAN_CLEAR 6 /* set if key can be cleared by root without permission */
2983 -#define KEY_FLAG_INVALIDATED 7 /* set if key has been invalidated */
2984 -#define KEY_FLAG_BUILTIN 8 /* set if key is built in to the kernel */
2985 -#define KEY_FLAG_ROOT_CAN_INVAL 9 /* set if key can be invalidated by root without permission */
2986 -#define KEY_FLAG_KEEP 10 /* set if key should not be removed */
2987 -#define KEY_FLAG_UID_KEYRING 11 /* set if key is a user or user session keyring */
2988 +#define KEY_FLAG_DEAD 0 /* set if key type has been deleted */
2989 +#define KEY_FLAG_REVOKED 1 /* set if key had been revoked */
2990 +#define KEY_FLAG_IN_QUOTA 2 /* set if key consumes quota */
2991 +#define KEY_FLAG_USER_CONSTRUCT 3 /* set if key is being constructed in userspace */
2992 +#define KEY_FLAG_ROOT_CAN_CLEAR 4 /* set if key can be cleared by root without permission */
2993 +#define KEY_FLAG_INVALIDATED 5 /* set if key has been invalidated */
2994 +#define KEY_FLAG_BUILTIN 6 /* set if key is built in to the kernel */
2995 +#define KEY_FLAG_ROOT_CAN_INVAL 7 /* set if key can be invalidated by root without permission */
2996 +#define KEY_FLAG_KEEP 8 /* set if key should not be removed */
2997 +#define KEY_FLAG_UID_KEYRING 9 /* set if key is a user or user session keyring */
2998
2999 /* the key type and key description string
3000 * - the desc is used to match a key against search criteria
3001 @@ -213,7 +217,6 @@ struct key {
3002 struct list_head name_link;
3003 struct assoc_array keys;
3004 };
3005 - int reject_error;
3006 };
3007
3008 /* This is set on a keyring to restrict the addition of a link to a key
3009 @@ -353,17 +356,27 @@ extern void key_set_timeout(struct key *, unsigned);
3010 #define KEY_NEED_SETATTR 0x20 /* Require permission to change attributes */
3011 #define KEY_NEED_ALL 0x3f /* All the above permissions */
3012
3013 +static inline short key_read_state(const struct key *key)
3014 +{
3015 + /* Barrier versus mark_key_instantiated(). */
3016 + return smp_load_acquire(&key->state);
3017 +}
3018 +
3019 /**
3020 - * key_is_instantiated - Determine if a key has been positively instantiated
3021 + * key_is_positive - Determine if a key has been positively instantiated
3022 * @key: The key to check.
3023 *
3024 * Return true if the specified key has been positively instantiated, false
3025 * otherwise.
3026 */
3027 -static inline bool key_is_instantiated(const struct key *key)
3028 +static inline bool key_is_positive(const struct key *key)
3029 +{
3030 + return key_read_state(key) == KEY_IS_POSITIVE;
3031 +}
3032 +
3033 +static inline bool key_is_negative(const struct key *key)
3034 {
3035 - return test_bit(KEY_FLAG_INSTANTIATED, &key->flags) &&
3036 - !test_bit(KEY_FLAG_NEGATIVE, &key->flags);
3037 + return key_read_state(key) < 0;
3038 }
3039
3040 #define dereference_key_rcu(KEY) \
3041 diff --git a/include/linux/mbus.h b/include/linux/mbus.h
3042 index 0d3f14fd2621..4773145246ed 100644
3043 --- a/include/linux/mbus.h
3044 +++ b/include/linux/mbus.h
3045 @@ -31,8 +31,8 @@ struct mbus_dram_target_info
3046 struct mbus_dram_window {
3047 u8 cs_index;
3048 u8 mbus_attr;
3049 - u32 base;
3050 - u32 size;
3051 + u64 base;
3052 + u64 size;
3053 } cs[4];
3054 };
3055
3056 diff --git a/include/sound/control.h b/include/sound/control.h
3057 index bd7246de58e7..a1f1152bc687 100644
3058 --- a/include/sound/control.h
3059 +++ b/include/sound/control.h
3060 @@ -248,6 +248,9 @@ int snd_ctl_add_vmaster_hook(struct snd_kcontrol *kctl,
3061 void *private_data);
3062 void snd_ctl_sync_vmaster(struct snd_kcontrol *kctl, bool hook_only);
3063 #define snd_ctl_sync_vmaster_hook(kctl) snd_ctl_sync_vmaster(kctl, true)
3064 +int snd_ctl_apply_vmaster_slaves(struct snd_kcontrol *kctl,
3065 + int (*func)(struct snd_kcontrol *, void *),
3066 + void *arg);
3067
3068 /*
3069 * Helper functions for jack-detection controls
3070 diff --git a/lib/digsig.c b/lib/digsig.c
3071 index 03d7c63837ae..6ba6fcd92dd1 100644
3072 --- a/lib/digsig.c
3073 +++ b/lib/digsig.c
3074 @@ -87,6 +87,12 @@ static int digsig_verify_rsa(struct key *key,
3075 down_read(&key->sem);
3076 ukp = user_key_payload_locked(key);
3077
3078 + if (!ukp) {
3079 + /* key was revoked before we acquired its semaphore */
3080 + err = -EKEYREVOKED;
3081 + goto err1;
3082 + }
3083 +
3084 if (ukp->datalen < sizeof(*pkh))
3085 goto err1;
3086
3087 diff --git a/net/can/af_can.c b/net/can/af_can.c
3088 index 88edac0f3e36..df186cdcc2b4 100644
3089 --- a/net/can/af_can.c
3090 +++ b/net/can/af_can.c
3091 @@ -875,9 +875,14 @@ static int can_pernet_init(struct net *net)
3092 spin_lock_init(&net->can.can_rcvlists_lock);
3093 net->can.can_rx_alldev_list =
3094 kzalloc(sizeof(struct dev_rcv_lists), GFP_KERNEL);
3095 -
3096 + if (!net->can.can_rx_alldev_list)
3097 + goto out;
3098 net->can.can_stats = kzalloc(sizeof(struct s_stats), GFP_KERNEL);
3099 + if (!net->can.can_stats)
3100 + goto out_free_alldev_list;
3101 net->can.can_pstats = kzalloc(sizeof(struct s_pstats), GFP_KERNEL);
3102 + if (!net->can.can_pstats)
3103 + goto out_free_can_stats;
3104
3105 if (IS_ENABLED(CONFIG_PROC_FS)) {
3106 /* the statistics are updated every second (timer triggered) */
3107 @@ -892,6 +897,13 @@ static int can_pernet_init(struct net *net)
3108 }
3109
3110 return 0;
3111 +
3112 + out_free_can_stats:
3113 + kfree(net->can.can_stats);
3114 + out_free_alldev_list:
3115 + kfree(net->can.can_rx_alldev_list);
3116 + out:
3117 + return -ENOMEM;
3118 }
3119
3120 static void can_pernet_exit(struct net *net)
3121 diff --git a/net/dns_resolver/dns_key.c b/net/dns_resolver/dns_key.c
3122 index 8737412c7b27..e1d4d898a007 100644
3123 --- a/net/dns_resolver/dns_key.c
3124 +++ b/net/dns_resolver/dns_key.c
3125 @@ -224,7 +224,7 @@ static int dns_resolver_match_preparse(struct key_match_data *match_data)
3126 static void dns_resolver_describe(const struct key *key, struct seq_file *m)
3127 {
3128 seq_puts(m, key->description);
3129 - if (key_is_instantiated(key)) {
3130 + if (key_is_positive(key)) {
3131 int err = PTR_ERR(key->payload.data[dns_key_error]);
3132
3133 if (err)
3134 diff --git a/samples/trace_events/trace-events-sample.c b/samples/trace_events/trace-events-sample.c
3135 index bc7fcf010a5b..446beb7ac48d 100644
3136 --- a/samples/trace_events/trace-events-sample.c
3137 +++ b/samples/trace_events/trace-events-sample.c
3138 @@ -78,29 +78,37 @@ static int simple_thread_fn(void *arg)
3139 }
3140
3141 static DEFINE_MUTEX(thread_mutex);
3142 +static bool simple_thread_cnt;
3143
3144 int foo_bar_reg(void)
3145 {
3146 + mutex_lock(&thread_mutex);
3147 + if (simple_thread_cnt++)
3148 + goto out;
3149 +
3150 pr_info("Starting thread for foo_bar_fn\n");
3151 /*
3152 * We shouldn't be able to start a trace when the module is
3153 * unloading (there's other locks to prevent that). But
3154 * for consistency sake, we still take the thread_mutex.
3155 */
3156 - mutex_lock(&thread_mutex);
3157 simple_tsk_fn = kthread_run(simple_thread_fn, NULL, "event-sample-fn");
3158 + out:
3159 mutex_unlock(&thread_mutex);
3160 return 0;
3161 }
3162
3163 void foo_bar_unreg(void)
3164 {
3165 - pr_info("Killing thread for foo_bar_fn\n");
3166 - /* protect against module unloading */
3167 mutex_lock(&thread_mutex);
3168 + if (--simple_thread_cnt)
3169 + goto out;
3170 +
3171 + pr_info("Killing thread for foo_bar_fn\n");
3172 if (simple_tsk_fn)
3173 kthread_stop(simple_tsk_fn);
3174 simple_tsk_fn = NULL;
3175 + out:
3176 mutex_unlock(&thread_mutex);
3177 }
3178
3179 diff --git a/security/keys/big_key.c b/security/keys/big_key.c
3180 index 9c3b16ee1768..ad39a0bdf846 100644
3181 --- a/security/keys/big_key.c
3182 +++ b/security/keys/big_key.c
3183 @@ -247,7 +247,7 @@ void big_key_revoke(struct key *key)
3184
3185 /* clear the quota */
3186 key_payload_reserve(key, 0);
3187 - if (key_is_instantiated(key) &&
3188 + if (key_is_positive(key) &&
3189 (size_t)key->payload.data[big_key_len] > BIG_KEY_FILE_THRESHOLD)
3190 vfs_truncate(path, 0);
3191 }
3192 @@ -279,7 +279,7 @@ void big_key_describe(const struct key *key, struct seq_file *m)
3193
3194 seq_puts(m, key->description);
3195
3196 - if (key_is_instantiated(key))
3197 + if (key_is_positive(key))
3198 seq_printf(m, ": %zu [%s]",
3199 datalen,
3200 datalen > BIG_KEY_FILE_THRESHOLD ? "file" : "buff");
3201 diff --git a/security/keys/encrypted-keys/encrypted.c b/security/keys/encrypted-keys/encrypted.c
3202 index 69855ba0d3b3..d92cbf9687c3 100644
3203 --- a/security/keys/encrypted-keys/encrypted.c
3204 +++ b/security/keys/encrypted-keys/encrypted.c
3205 @@ -309,6 +309,13 @@ static struct key *request_user_key(const char *master_desc, const u8 **master_k
3206
3207 down_read(&ukey->sem);
3208 upayload = user_key_payload_locked(ukey);
3209 + if (!upayload) {
3210 + /* key was revoked before we acquired its semaphore */
3211 + up_read(&ukey->sem);
3212 + key_put(ukey);
3213 + ukey = ERR_PTR(-EKEYREVOKED);
3214 + goto error;
3215 + }
3216 *master_key = upayload->data;
3217 *master_keylen = upayload->datalen;
3218 error:
3219 @@ -847,7 +854,7 @@ static int encrypted_update(struct key *key, struct key_preparsed_payload *prep)
3220 size_t datalen = prep->datalen;
3221 int ret = 0;
3222
3223 - if (test_bit(KEY_FLAG_NEGATIVE, &key->flags))
3224 + if (key_is_negative(key))
3225 return -ENOKEY;
3226 if (datalen <= 0 || datalen > 32767 || !prep->data)
3227 return -EINVAL;
3228 diff --git a/security/keys/gc.c b/security/keys/gc.c
3229 index 87cb260e4890..f01d48cb3de1 100644
3230 --- a/security/keys/gc.c
3231 +++ b/security/keys/gc.c
3232 @@ -129,15 +129,15 @@ static noinline void key_gc_unused_keys(struct list_head *keys)
3233 while (!list_empty(keys)) {
3234 struct key *key =
3235 list_entry(keys->next, struct key, graveyard_link);
3236 + short state = key->state;
3237 +
3238 list_del(&key->graveyard_link);
3239
3240 kdebug("- %u", key->serial);
3241 key_check(key);
3242
3243 /* Throw away the key data if the key is instantiated */
3244 - if (test_bit(KEY_FLAG_INSTANTIATED, &key->flags) &&
3245 - !test_bit(KEY_FLAG_NEGATIVE, &key->flags) &&
3246 - key->type->destroy)
3247 + if (state == KEY_IS_POSITIVE && key->type->destroy)
3248 key->type->destroy(key);
3249
3250 security_key_free(key);
3251 @@ -151,7 +151,7 @@ static noinline void key_gc_unused_keys(struct list_head *keys)
3252 }
3253
3254 atomic_dec(&key->user->nkeys);
3255 - if (test_bit(KEY_FLAG_INSTANTIATED, &key->flags))
3256 + if (state != KEY_IS_UNINSTANTIATED)
3257 atomic_dec(&key->user->nikeys);
3258
3259 key_user_put(key->user);
3260 diff --git a/security/keys/key.c b/security/keys/key.c
3261 index e5c0896c3a8f..3186c769f300 100644
3262 --- a/security/keys/key.c
3263 +++ b/security/keys/key.c
3264 @@ -401,6 +401,18 @@ int key_payload_reserve(struct key *key, size_t datalen)
3265 }
3266 EXPORT_SYMBOL(key_payload_reserve);
3267
3268 +/*
3269 + * Change the key state to being instantiated.
3270 + */
3271 +static void mark_key_instantiated(struct key *key, int reject_error)
3272 +{
3273 + /* Commit the payload before setting the state; barrier versus
3274 + * key_read_state().
3275 + */
3276 + smp_store_release(&key->state,
3277 + (reject_error < 0) ? reject_error : KEY_IS_POSITIVE);
3278 +}
3279 +
3280 /*
3281 * Instantiate a key and link it into the target keyring atomically. Must be
3282 * called with the target keyring's semaphore writelocked. The target key's
3283 @@ -424,14 +436,14 @@ static int __key_instantiate_and_link(struct key *key,
3284 mutex_lock(&key_construction_mutex);
3285
3286 /* can't instantiate twice */
3287 - if (!test_bit(KEY_FLAG_INSTANTIATED, &key->flags)) {
3288 + if (key->state == KEY_IS_UNINSTANTIATED) {
3289 /* instantiate the key */
3290 ret = key->type->instantiate(key, prep);
3291
3292 if (ret == 0) {
3293 /* mark the key as being instantiated */
3294 atomic_inc(&key->user->nikeys);
3295 - set_bit(KEY_FLAG_INSTANTIATED, &key->flags);
3296 + mark_key_instantiated(key, 0);
3297
3298 if (test_and_clear_bit(KEY_FLAG_USER_CONSTRUCT, &key->flags))
3299 awaken = 1;
3300 @@ -577,13 +589,10 @@ int key_reject_and_link(struct key *key,
3301 mutex_lock(&key_construction_mutex);
3302
3303 /* can't instantiate twice */
3304 - if (!test_bit(KEY_FLAG_INSTANTIATED, &key->flags)) {
3305 + if (key->state == KEY_IS_UNINSTANTIATED) {
3306 /* mark the key as being negatively instantiated */
3307 atomic_inc(&key->user->nikeys);
3308 - key->reject_error = -error;
3309 - smp_wmb();
3310 - set_bit(KEY_FLAG_NEGATIVE, &key->flags);
3311 - set_bit(KEY_FLAG_INSTANTIATED, &key->flags);
3312 + mark_key_instantiated(key, -error);
3313 now = current_kernel_time();
3314 key->expiry = now.tv_sec + timeout;
3315 key_schedule_gc(key->expiry + key_gc_delay);
3316 @@ -752,8 +761,8 @@ static inline key_ref_t __key_update(key_ref_t key_ref,
3317
3318 ret = key->type->update(key, prep);
3319 if (ret == 0)
3320 - /* updating a negative key instantiates it */
3321 - clear_bit(KEY_FLAG_NEGATIVE, &key->flags);
3322 + /* Updating a negative key positively instantiates it */
3323 + mark_key_instantiated(key, 0);
3324
3325 up_write(&key->sem);
3326
3327 @@ -936,6 +945,16 @@ key_ref_t key_create_or_update(key_ref_t keyring_ref,
3328 */
3329 __key_link_end(keyring, &index_key, edit);
3330
3331 + key = key_ref_to_ptr(key_ref);
3332 + if (test_bit(KEY_FLAG_USER_CONSTRUCT, &key->flags)) {
3333 + ret = wait_for_key_construction(key, true);
3334 + if (ret < 0) {
3335 + key_ref_put(key_ref);
3336 + key_ref = ERR_PTR(ret);
3337 + goto error_free_prep;
3338 + }
3339 + }
3340 +
3341 key_ref = __key_update(key_ref, &prep);
3342 goto error_free_prep;
3343 }
3344 @@ -986,8 +1005,8 @@ int key_update(key_ref_t key_ref, const void *payload, size_t plen)
3345
3346 ret = key->type->update(key, &prep);
3347 if (ret == 0)
3348 - /* updating a negative key instantiates it */
3349 - clear_bit(KEY_FLAG_NEGATIVE, &key->flags);
3350 + /* Updating a negative key positively instantiates it */
3351 + mark_key_instantiated(key, 0);
3352
3353 up_write(&key->sem);
3354
3355 diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
3356 index 6a82090c7fc1..2eb624c0aefc 100644
3357 --- a/security/keys/keyctl.c
3358 +++ b/security/keys/keyctl.c
3359 @@ -766,10 +766,9 @@ long keyctl_read_key(key_serial_t keyid, char __user *buffer, size_t buflen)
3360
3361 key = key_ref_to_ptr(key_ref);
3362
3363 - if (test_bit(KEY_FLAG_NEGATIVE, &key->flags)) {
3364 - ret = -ENOKEY;
3365 - goto error2;
3366 - }
3367 + ret = key_read_state(key);
3368 + if (ret < 0)
3369 + goto error2; /* Negatively instantiated */
3370
3371 /* see if we can read it directly */
3372 ret = key_permission(key_ref, KEY_NEED_READ);
3373 @@ -901,7 +900,7 @@ long keyctl_chown_key(key_serial_t id, uid_t user, gid_t group)
3374 atomic_dec(&key->user->nkeys);
3375 atomic_inc(&newowner->nkeys);
3376
3377 - if (test_bit(KEY_FLAG_INSTANTIATED, &key->flags)) {
3378 + if (key->state != KEY_IS_UNINSTANTIATED) {
3379 atomic_dec(&key->user->nikeys);
3380 atomic_inc(&newowner->nikeys);
3381 }
3382 diff --git a/security/keys/keyring.c b/security/keys/keyring.c
3383 index 4fa82a8a9c0e..06173b091a74 100644
3384 --- a/security/keys/keyring.c
3385 +++ b/security/keys/keyring.c
3386 @@ -414,7 +414,7 @@ static void keyring_describe(const struct key *keyring, struct seq_file *m)
3387 else
3388 seq_puts(m, "[anon]");
3389
3390 - if (key_is_instantiated(keyring)) {
3391 + if (key_is_positive(keyring)) {
3392 if (keyring->keys.nr_leaves_on_tree != 0)
3393 seq_printf(m, ": %lu", keyring->keys.nr_leaves_on_tree);
3394 else
3395 @@ -553,7 +553,8 @@ static int keyring_search_iterator(const void *object, void *iterator_data)
3396 {
3397 struct keyring_search_context *ctx = iterator_data;
3398 const struct key *key = keyring_ptr_to_key(object);
3399 - unsigned long kflags = key->flags;
3400 + unsigned long kflags = READ_ONCE(key->flags);
3401 + short state = READ_ONCE(key->state);
3402
3403 kenter("{%d}", key->serial);
3404
3405 @@ -597,9 +598,8 @@ static int keyring_search_iterator(const void *object, void *iterator_data)
3406
3407 if (ctx->flags & KEYRING_SEARCH_DO_STATE_CHECK) {
3408 /* we set a different error code if we pass a negative key */
3409 - if (kflags & (1 << KEY_FLAG_NEGATIVE)) {
3410 - smp_rmb();
3411 - ctx->result = ERR_PTR(key->reject_error);
3412 + if (state < 0) {
3413 + ctx->result = ERR_PTR(state);
3414 kleave(" = %d [neg]", ctx->skipped_ret);
3415 goto skipped;
3416 }
3417 diff --git a/security/keys/proc.c b/security/keys/proc.c
3418 index bf08d02b6646..e6aa1b257578 100644
3419 --- a/security/keys/proc.c
3420 +++ b/security/keys/proc.c
3421 @@ -182,6 +182,7 @@ static int proc_keys_show(struct seq_file *m, void *v)
3422 unsigned long timo;
3423 key_ref_t key_ref, skey_ref;
3424 char xbuf[16];
3425 + short state;
3426 int rc;
3427
3428 struct keyring_search_context ctx = {
3429 @@ -240,17 +241,19 @@ static int proc_keys_show(struct seq_file *m, void *v)
3430 sprintf(xbuf, "%luw", timo / (60*60*24*7));
3431 }
3432
3433 + state = key_read_state(key);
3434 +
3435 #define showflag(KEY, LETTER, FLAG) \
3436 (test_bit(FLAG, &(KEY)->flags) ? LETTER : '-')
3437
3438 seq_printf(m, "%08x %c%c%c%c%c%c%c %5d %4s %08x %5d %5d %-9.9s ",
3439 key->serial,
3440 - showflag(key, 'I', KEY_FLAG_INSTANTIATED),
3441 + state != KEY_IS_UNINSTANTIATED ? 'I' : '-',
3442 showflag(key, 'R', KEY_FLAG_REVOKED),
3443 showflag(key, 'D', KEY_FLAG_DEAD),
3444 showflag(key, 'Q', KEY_FLAG_IN_QUOTA),
3445 showflag(key, 'U', KEY_FLAG_USER_CONSTRUCT),
3446 - showflag(key, 'N', KEY_FLAG_NEGATIVE),
3447 + state < 0 ? 'N' : '-',
3448 showflag(key, 'i', KEY_FLAG_INVALIDATED),
3449 refcount_read(&key->usage),
3450 xbuf,
3451 diff --git a/security/keys/process_keys.c b/security/keys/process_keys.c
3452 index 293d3598153b..740affd65ee9 100644
3453 --- a/security/keys/process_keys.c
3454 +++ b/security/keys/process_keys.c
3455 @@ -730,7 +730,7 @@ key_ref_t lookup_user_key(key_serial_t id, unsigned long lflags,
3456
3457 ret = -EIO;
3458 if (!(lflags & KEY_LOOKUP_PARTIAL) &&
3459 - !test_bit(KEY_FLAG_INSTANTIATED, &key->flags))
3460 + key_read_state(key) == KEY_IS_UNINSTANTIATED)
3461 goto invalid_key;
3462
3463 /* check the permissions */
3464 diff --git a/security/keys/request_key.c b/security/keys/request_key.c
3465 index 63e63a42db3c..e8036cd0ad54 100644
3466 --- a/security/keys/request_key.c
3467 +++ b/security/keys/request_key.c
3468 @@ -595,10 +595,9 @@ int wait_for_key_construction(struct key *key, bool intr)
3469 intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
3470 if (ret)
3471 return -ERESTARTSYS;
3472 - if (test_bit(KEY_FLAG_NEGATIVE, &key->flags)) {
3473 - smp_rmb();
3474 - return key->reject_error;
3475 - }
3476 + ret = key_read_state(key);
3477 + if (ret < 0)
3478 + return ret;
3479 return key_validate(key);
3480 }
3481 EXPORT_SYMBOL(wait_for_key_construction);
3482 diff --git a/security/keys/request_key_auth.c b/security/keys/request_key_auth.c
3483 index afe9d22ab361..4a740e50322b 100644
3484 --- a/security/keys/request_key_auth.c
3485 +++ b/security/keys/request_key_auth.c
3486 @@ -73,7 +73,7 @@ static void request_key_auth_describe(const struct key *key,
3487
3488 seq_puts(m, "key:");
3489 seq_puts(m, key->description);
3490 - if (key_is_instantiated(key))
3491 + if (key_is_positive(key))
3492 seq_printf(m, " pid:%d ci:%zu", rka->pid, rka->callout_len);
3493 }
3494
3495 diff --git a/security/keys/trusted.c b/security/keys/trusted.c
3496 index ddfaebf60fc8..bd85315cbfeb 100644
3497 --- a/security/keys/trusted.c
3498 +++ b/security/keys/trusted.c
3499 @@ -1066,7 +1066,7 @@ static int trusted_update(struct key *key, struct key_preparsed_payload *prep)
3500 char *datablob;
3501 int ret = 0;
3502
3503 - if (test_bit(KEY_FLAG_NEGATIVE, &key->flags))
3504 + if (key_is_negative(key))
3505 return -ENOKEY;
3506 p = key->payload.data[0];
3507 if (!p->migratable)
3508 diff --git a/security/keys/user_defined.c b/security/keys/user_defined.c
3509 index 3d8c68eba516..9f558bedba23 100644
3510 --- a/security/keys/user_defined.c
3511 +++ b/security/keys/user_defined.c
3512 @@ -114,7 +114,7 @@ int user_update(struct key *key, struct key_preparsed_payload *prep)
3513
3514 /* attach the new data, displacing the old */
3515 key->expiry = prep->expiry;
3516 - if (!test_bit(KEY_FLAG_NEGATIVE, &key->flags))
3517 + if (key_is_positive(key))
3518 zap = dereference_key_locked(key);
3519 rcu_assign_keypointer(key, prep->payload.data[0]);
3520 prep->payload.data[0] = NULL;
3521 @@ -162,7 +162,7 @@ EXPORT_SYMBOL_GPL(user_destroy);
3522 void user_describe(const struct key *key, struct seq_file *m)
3523 {
3524 seq_puts(m, key->description);
3525 - if (key_is_instantiated(key))
3526 + if (key_is_positive(key))
3527 seq_printf(m, ": %u", key->datalen);
3528 }
3529
3530 diff --git a/sound/core/seq/seq_lock.c b/sound/core/seq/seq_lock.c
3531 index 0ff7926a5a69..cda64b489e42 100644
3532 --- a/sound/core/seq/seq_lock.c
3533 +++ b/sound/core/seq/seq_lock.c
3534 @@ -23,8 +23,6 @@
3535 #include <sound/core.h>
3536 #include "seq_lock.h"
3537
3538 -#if defined(CONFIG_SMP) || defined(CONFIG_SND_DEBUG)
3539 -
3540 /* wait until all locks are released */
3541 void snd_use_lock_sync_helper(snd_use_lock_t *lockp, const char *file, int line)
3542 {
3543 @@ -41,5 +39,3 @@ void snd_use_lock_sync_helper(snd_use_lock_t *lockp, const char *file, int line)
3544 }
3545 }
3546 EXPORT_SYMBOL(snd_use_lock_sync_helper);
3547 -
3548 -#endif
3549 diff --git a/sound/core/seq/seq_lock.h b/sound/core/seq/seq_lock.h
3550 index 54044bc2c9ef..ac38031c370e 100644
3551 --- a/sound/core/seq/seq_lock.h
3552 +++ b/sound/core/seq/seq_lock.h
3553 @@ -3,8 +3,6 @@
3554
3555 #include <linux/sched.h>
3556
3557 -#if defined(CONFIG_SMP) || defined(CONFIG_SND_DEBUG)
3558 -
3559 typedef atomic_t snd_use_lock_t;
3560
3561 /* initialize lock */
3562 @@ -20,14 +18,4 @@ typedef atomic_t snd_use_lock_t;
3563 void snd_use_lock_sync_helper(snd_use_lock_t *lock, const char *file, int line);
3564 #define snd_use_lock_sync(lockp) snd_use_lock_sync_helper(lockp, __BASE_FILE__, __LINE__)
3565
3566 -#else /* SMP || CONFIG_SND_DEBUG */
3567 -
3568 -typedef spinlock_t snd_use_lock_t; /* dummy */
3569 -#define snd_use_lock_init(lockp) /**/
3570 -#define snd_use_lock_use(lockp) /**/
3571 -#define snd_use_lock_free(lockp) /**/
3572 -#define snd_use_lock_sync(lockp) /**/
3573 -
3574 -#endif /* SMP || CONFIG_SND_DEBUG */
3575 -
3576 #endif /* __SND_SEQ_LOCK_H */
3577 diff --git a/sound/core/vmaster.c b/sound/core/vmaster.c
3578 index 6c58e6f73a01..e43af18d4383 100644
3579 --- a/sound/core/vmaster.c
3580 +++ b/sound/core/vmaster.c
3581 @@ -484,3 +484,34 @@ void snd_ctl_sync_vmaster(struct snd_kcontrol *kcontrol, bool hook_only)
3582 master->hook(master->hook_private_data, master->val);
3583 }
3584 EXPORT_SYMBOL_GPL(snd_ctl_sync_vmaster);
3585 +
3586 +/**
3587 + * snd_ctl_apply_vmaster_slaves - Apply function to each vmaster slave
3588 + * @kctl: vmaster kctl element
3589 + * @func: function to apply
3590 + * @arg: optional function argument
3591 + *
3592 + * Apply the function @func to each slave kctl of the given vmaster kctl.
3593 + * Returns 0 if successful, or a negative error code.
3594 + */
3595 +int snd_ctl_apply_vmaster_slaves(struct snd_kcontrol *kctl,
3596 + int (*func)(struct snd_kcontrol *, void *),
3597 + void *arg)
3598 +{
3599 + struct link_master *master;
3600 + struct link_slave *slave;
3601 + int err;
3602 +
3603 + master = snd_kcontrol_chip(kctl);
3604 + err = master_init(master);
3605 + if (err < 0)
3606 + return err;
3607 + list_for_each_entry(slave, &master->slaves, list) {
3608 + err = func(&slave->slave, arg);
3609 + if (err < 0)
3610 + return err;
3611 + }
3612 +
3613 + return 0;
3614 +}
3615 +EXPORT_SYMBOL_GPL(snd_ctl_apply_vmaster_slaves);
3616 diff --git a/sound/hda/hdac_controller.c b/sound/hda/hdac_controller.c
3617 index 978dc1801b3a..f6d2985b2520 100644
3618 --- a/sound/hda/hdac_controller.c
3619 +++ b/sound/hda/hdac_controller.c
3620 @@ -284,6 +284,11 @@ int snd_hdac_bus_parse_capabilities(struct hdac_bus *bus)
3621 dev_dbg(bus->dev, "HDA capability ID: 0x%x\n",
3622 (cur_cap & AZX_CAP_HDR_ID_MASK) >> AZX_CAP_HDR_ID_OFF);
3623
3624 + if (cur_cap == -1) {
3625 + dev_dbg(bus->dev, "Invalid capability reg read\n");
3626 + break;
3627 + }
3628 +
3629 switch ((cur_cap & AZX_CAP_HDR_ID_MASK) >> AZX_CAP_HDR_ID_OFF) {
3630 case AZX_ML_CAP_ID:
3631 dev_dbg(bus->dev, "Found ML capability\n");
3632 diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
3633 index 821aad374a06..0bb46966d2d4 100644
3634 --- a/sound/pci/hda/hda_codec.c
3635 +++ b/sound/pci/hda/hda_codec.c
3636 @@ -1803,36 +1803,6 @@ static int check_slave_present(struct hda_codec *codec,
3637 return 1;
3638 }
3639
3640 -/* guess the value corresponding to 0dB */
3641 -static int get_kctl_0dB_offset(struct hda_codec *codec,
3642 - struct snd_kcontrol *kctl, int *step_to_check)
3643 -{
3644 - int _tlv[4];
3645 - const int *tlv = NULL;
3646 - int val = -1;
3647 -
3648 - if ((kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) &&
3649 - kctl->tlv.c == snd_hda_mixer_amp_tlv) {
3650 - get_ctl_amp_tlv(kctl, _tlv);
3651 - tlv = _tlv;
3652 - } else if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)
3653 - tlv = kctl->tlv.p;
3654 - if (tlv && tlv[0] == SNDRV_CTL_TLVT_DB_SCALE) {
3655 - int step = tlv[3];
3656 - step &= ~TLV_DB_SCALE_MUTE;
3657 - if (!step)
3658 - return -1;
3659 - if (*step_to_check && *step_to_check != step) {
3660 - codec_err(codec, "Mismatching dB step for vmaster slave (%d!=%d)\n",
3661 -- *step_to_check, step);
3662 - return -1;
3663 - }
3664 - *step_to_check = step;
3665 - val = -tlv[2] / step;
3666 - }
3667 - return val;
3668 -}
3669 -
3670 /* call kctl->put with the given value(s) */
3671 static int put_kctl_with_value(struct snd_kcontrol *kctl, int val)
3672 {
3673 @@ -1847,19 +1817,58 @@ static int put_kctl_with_value(struct snd_kcontrol *kctl, int val)
3674 return 0;
3675 }
3676
3677 -/* initialize the slave volume with 0dB */
3678 -static int init_slave_0dB(struct hda_codec *codec,
3679 - void *data, struct snd_kcontrol *slave)
3680 +struct slave_init_arg {
3681 + struct hda_codec *codec;
3682 + int step;
3683 +};
3684 +
3685 +/* initialize the slave volume with 0dB via snd_ctl_apply_vmaster_slaves() */
3686 +static int init_slave_0dB(struct snd_kcontrol *kctl, void *_arg)
3687 {
3688 - int offset = get_kctl_0dB_offset(codec, slave, data);
3689 - if (offset > 0)
3690 - put_kctl_with_value(slave, offset);
3691 + struct slave_init_arg *arg = _arg;
3692 + int _tlv[4];
3693 + const int *tlv = NULL;
3694 + int step;
3695 + int val;
3696 +
3697 + if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK) {
3698 + if (kctl->tlv.c != snd_hda_mixer_amp_tlv) {
3699 + codec_err(arg->codec,
3700 + "Unexpected TLV callback for slave %s:%d\n",
3701 + kctl->id.name, kctl->id.index);
3702 + return 0; /* ignore */
3703 + }
3704 + get_ctl_amp_tlv(kctl, _tlv);
3705 + tlv = _tlv;
3706 + } else if (kctl->vd[0].access & SNDRV_CTL_ELEM_ACCESS_TLV_READ)
3707 + tlv = kctl->tlv.p;
3708 +
3709 + if (!tlv || tlv[0] != SNDRV_CTL_TLVT_DB_SCALE)
3710 + return 0;
3711 +
3712 + step = tlv[3];
3713 + step &= ~TLV_DB_SCALE_MUTE;
3714 + if (!step)
3715 + return 0;
3716 + if (arg->step && arg->step != step) {
3717 + codec_err(arg->codec,
3718 + "Mismatching dB step for vmaster slave (%d!=%d)\n",
3719 + arg->step, step);
3720 + return 0;
3721 + }
3722 +
3723 + arg->step = step;
3724 + val = -tlv[2] / step;
3725 + if (val > 0) {
3726 + put_kctl_with_value(kctl, val);
3727 + return val;
3728 + }
3729 +
3730 return 0;
3731 }
3732
3733 -/* unmute the slave */
3734 -static int init_slave_unmute(struct hda_codec *codec,
3735 - void *data, struct snd_kcontrol *slave)
3736 +/* unmute the slave via snd_ctl_apply_vmaster_slaves() */
3737 +static int init_slave_unmute(struct snd_kcontrol *slave, void *_arg)
3738 {
3739 return put_kctl_with_value(slave, 1);
3740 }
3741 @@ -1919,9 +1928,13 @@ int __snd_hda_add_vmaster(struct hda_codec *codec, char *name,
3742 /* init with master mute & zero volume */
3743 put_kctl_with_value(kctl, 0);
3744 if (init_slave_vol) {
3745 - int step = 0;
3746 - map_slaves(codec, slaves, suffix,
3747 - tlv ? init_slave_0dB : init_slave_unmute, &step);
3748 + struct slave_init_arg arg = {
3749 + .codec = codec,
3750 + .step = 0,
3751 + };
3752 + snd_ctl_apply_vmaster_slaves(kctl,
3753 + tlv ? init_slave_0dB : init_slave_unmute,
3754 + &arg);
3755 }
3756
3757 if (ctl_ret)
3758 diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
3759 index 5d2a63248b1d..0e54fe490458 100644
3760 --- a/sound/usb/quirks.c
3761 +++ b/sound/usb/quirks.c
3762 @@ -1352,6 +1352,7 @@ u64 snd_usb_interface_dsd_format_quirks(struct snd_usb_audio *chip,
3763 case USB_ID(0x20b1, 0x2008): /* Matrix Audio X-Sabre */
3764 case USB_ID(0x20b1, 0x300a): /* Matrix Audio Mini-i Pro */
3765 case USB_ID(0x22d9, 0x0416): /* OPPO HA-1 */
3766 + case USB_ID(0x2772, 0x0230): /* Pro-Ject Pre Box S2 Digital */
3767 if (fp->altsetting == 2)
3768 return SNDRV_PCM_FMTBIT_DSD_U32_BE;
3769 break;
3770 diff --git a/tools/power/x86/turbostat/turbostat.c b/tools/power/x86/turbostat/turbostat.c
3771 index 0dafba2c1e7d..bd9c6b31a504 100644
3772 --- a/tools/power/x86/turbostat/turbostat.c
3773 +++ b/tools/power/x86/turbostat/turbostat.c
3774 @@ -92,7 +92,6 @@ unsigned int do_ring_perf_limit_reasons;
3775 unsigned int crystal_hz;
3776 unsigned long long tsc_hz;
3777 int base_cpu;
3778 -int do_migrate;
3779 double discover_bclk(unsigned int family, unsigned int model);
3780 unsigned int has_hwp; /* IA32_PM_ENABLE, IA32_HWP_CAPABILITIES */
3781 /* IA32_HWP_REQUEST, IA32_HWP_STATUS */
3782 @@ -303,9 +302,6 @@ int for_all_cpus(int (func)(struct thread_data *, struct core_data *, struct pkg
3783
3784 int cpu_migrate(int cpu)
3785 {
3786 - if (!do_migrate)
3787 - return 0;
3788 -
3789 CPU_ZERO_S(cpu_affinity_setsize, cpu_affinity_set);
3790 CPU_SET_S(cpu, cpu_affinity_setsize, cpu_affinity_set);
3791 if (sched_setaffinity(0, cpu_affinity_setsize, cpu_affinity_set) == -1)
3792 @@ -5007,7 +5003,6 @@ void cmdline(int argc, char **argv)
3793 {"hide", required_argument, 0, 'H'}, // meh, -h taken by --help
3794 {"Joules", no_argument, 0, 'J'},
3795 {"list", no_argument, 0, 'l'},
3796 - {"migrate", no_argument, 0, 'm'},
3797 {"out", required_argument, 0, 'o'},
3798 {"quiet", no_argument, 0, 'q'},
3799 {"show", required_argument, 0, 's'},
3800 @@ -5019,7 +5014,7 @@ void cmdline(int argc, char **argv)
3801
3802 progname = argv[0];
3803
3804 - while ((opt = getopt_long_only(argc, argv, "+C:c:Ddhi:Jmo:qST:v",
3805 + while ((opt = getopt_long_only(argc, argv, "+C:c:Ddhi:JM:m:o:qST:v",
3806 long_options, &option_index)) != -1) {
3807 switch (opt) {
3808 case 'a':
3809 @@ -5062,9 +5057,6 @@ void cmdline(int argc, char **argv)
3810 list_header_only++;
3811 quiet++;
3812 break;
3813 - case 'm':
3814 - do_migrate = 1;
3815 - break;
3816 case 'o':
3817 outf = fopen_or_die(optarg, "w");
3818 break;