Magellan Linux

Contents of /trunk/kernel-alx/patches-4.14/0128-4.14.29-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3238 - (show annotations) (download)
Fri Nov 9 12:14:58 2018 UTC (5 years, 5 months ago) by niro
File size: 53609 byte(s)
-added up to patches-4.14.79
1 diff --git a/Makefile b/Makefile
2 index 9ae370a47ff9..4b2aa0dd4043 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 4
8 PATCHLEVEL = 14
9 -SUBLEVEL = 28
10 +SUBLEVEL = 29
11 EXTRAVERSION =
12 NAME = Petit Gorille
13
14 diff --git a/arch/parisc/kernel/cache.c b/arch/parisc/kernel/cache.c
15 index 79089778725b..e3b45546d589 100644
16 --- a/arch/parisc/kernel/cache.c
17 +++ b/arch/parisc/kernel/cache.c
18 @@ -543,7 +543,8 @@ void flush_cache_mm(struct mm_struct *mm)
19 rp3440, etc. So, avoid it if the mm isn't too big. */
20 if ((!IS_ENABLED(CONFIG_SMP) || !arch_irqs_disabled()) &&
21 mm_total_size(mm) >= parisc_cache_flush_threshold) {
22 - flush_tlb_all();
23 + if (mm->context)
24 + flush_tlb_all();
25 flush_cache_all();
26 return;
27 }
28 @@ -571,6 +572,8 @@ void flush_cache_mm(struct mm_struct *mm)
29 pfn = pte_pfn(*ptep);
30 if (!pfn_valid(pfn))
31 continue;
32 + if (unlikely(mm->context))
33 + flush_tlb_page(vma, addr);
34 __flush_cache_page(vma, addr, PFN_PHYS(pfn));
35 }
36 }
37 @@ -579,26 +582,46 @@ void flush_cache_mm(struct mm_struct *mm)
38 void flush_cache_range(struct vm_area_struct *vma,
39 unsigned long start, unsigned long end)
40 {
41 + pgd_t *pgd;
42 + unsigned long addr;
43 +
44 if ((!IS_ENABLED(CONFIG_SMP) || !arch_irqs_disabled()) &&
45 end - start >= parisc_cache_flush_threshold) {
46 - flush_tlb_range(vma, start, end);
47 + if (vma->vm_mm->context)
48 + flush_tlb_range(vma, start, end);
49 flush_cache_all();
50 return;
51 }
52
53 - flush_user_dcache_range_asm(start, end);
54 - if (vma->vm_flags & VM_EXEC)
55 - flush_user_icache_range_asm(start, end);
56 - flush_tlb_range(vma, start, end);
57 + if (vma->vm_mm->context == mfsp(3)) {
58 + flush_user_dcache_range_asm(start, end);
59 + if (vma->vm_flags & VM_EXEC)
60 + flush_user_icache_range_asm(start, end);
61 + flush_tlb_range(vma, start, end);
62 + return;
63 + }
64 +
65 + pgd = vma->vm_mm->pgd;
66 + for (addr = vma->vm_start; addr < vma->vm_end; addr += PAGE_SIZE) {
67 + unsigned long pfn;
68 + pte_t *ptep = get_ptep(pgd, addr);
69 + if (!ptep)
70 + continue;
71 + pfn = pte_pfn(*ptep);
72 + if (pfn_valid(pfn)) {
73 + if (unlikely(vma->vm_mm->context))
74 + flush_tlb_page(vma, addr);
75 + __flush_cache_page(vma, addr, PFN_PHYS(pfn));
76 + }
77 + }
78 }
79
80 void
81 flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long pfn)
82 {
83 - BUG_ON(!vma->vm_mm->context);
84 -
85 if (pfn_valid(pfn)) {
86 - flush_tlb_page(vma, vmaddr);
87 + if (likely(vma->vm_mm->context))
88 + flush_tlb_page(vma, vmaddr);
89 __flush_cache_page(vma, vmaddr, PFN_PHYS(pfn));
90 }
91 }
92 diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h
93 index 66c14347c502..23a65439c37c 100644
94 --- a/arch/x86/include/asm/cpufeatures.h
95 +++ b/arch/x86/include/asm/cpufeatures.h
96 @@ -314,6 +314,7 @@
97 #define X86_FEATURE_VPCLMULQDQ (16*32+10) /* Carry-Less Multiplication Double Quadword */
98 #define X86_FEATURE_AVX512_VNNI (16*32+11) /* Vector Neural Network Instructions */
99 #define X86_FEATURE_AVX512_BITALG (16*32+12) /* Support for VPOPCNT[B,W] and VPSHUF-BITQMB instructions */
100 +#define X86_FEATURE_TME (16*32+13) /* Intel Total Memory Encryption */
101 #define X86_FEATURE_AVX512_VPOPCNTDQ (16*32+14) /* POPCNT for vectors of DW/QW */
102 #define X86_FEATURE_LA57 (16*32+16) /* 5-level page tables */
103 #define X86_FEATURE_RDPID (16*32+22) /* RDPID instruction */
104 @@ -326,6 +327,7 @@
105 /* Intel-defined CPU features, CPUID level 0x00000007:0 (EDX), word 18 */
106 #define X86_FEATURE_AVX512_4VNNIW (18*32+ 2) /* AVX-512 Neural Network Instructions */
107 #define X86_FEATURE_AVX512_4FMAPS (18*32+ 3) /* AVX-512 Multiply Accumulation Single precision */
108 +#define X86_FEATURE_PCONFIG (18*32+18) /* Intel PCONFIG */
109 #define X86_FEATURE_SPEC_CTRL (18*32+26) /* "" Speculation Control (IBRS + IBPB) */
110 #define X86_FEATURE_INTEL_STIBP (18*32+27) /* "" Single Thread Indirect Branch Predictors */
111 #define X86_FEATURE_ARCH_CAPABILITIES (18*32+29) /* IA32_ARCH_CAPABILITIES MSR (Intel) */
112 diff --git a/arch/x86/include/asm/nospec-branch.h b/arch/x86/include/asm/nospec-branch.h
113 index d0dabeae0505..f928ad9b143f 100644
114 --- a/arch/x86/include/asm/nospec-branch.h
115 +++ b/arch/x86/include/asm/nospec-branch.h
116 @@ -183,7 +183,10 @@
117 * otherwise we'll run out of registers. We don't care about CET
118 * here, anyway.
119 */
120 -# define CALL_NOSPEC ALTERNATIVE("call *%[thunk_target]\n", \
121 +# define CALL_NOSPEC \
122 + ALTERNATIVE( \
123 + ANNOTATE_RETPOLINE_SAFE \
124 + "call *%[thunk_target]\n", \
125 " jmp 904f;\n" \
126 " .align 16\n" \
127 "901: call 903f;\n" \
128 diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c
129 index 4aa9fd379390..c3af167d0a70 100644
130 --- a/arch/x86/kernel/cpu/intel.c
131 +++ b/arch/x86/kernel/cpu/intel.c
132 @@ -105,7 +105,7 @@ static void probe_xeon_phi_r3mwait(struct cpuinfo_x86 *c)
133 /*
134 * Early microcode releases for the Spectre v2 mitigation were broken.
135 * Information taken from;
136 - * - https://newsroom.intel.com/wp-content/uploads/sites/11/2018/01/microcode-update-guidance.pdf
137 + * - https://newsroom.intel.com/wp-content/uploads/sites/11/2018/03/microcode-update-guidance.pdf
138 * - https://kb.vmware.com/s/article/52345
139 * - Microcode revisions observed in the wild
140 * - Release note from 20180108 microcode release
141 @@ -123,7 +123,6 @@ static const struct sku_microcode spectre_bad_microcodes[] = {
142 { INTEL_FAM6_KABYLAKE_MOBILE, 0x09, 0x80 },
143 { INTEL_FAM6_SKYLAKE_X, 0x03, 0x0100013e },
144 { INTEL_FAM6_SKYLAKE_X, 0x04, 0x0200003c },
145 - { INTEL_FAM6_SKYLAKE_DESKTOP, 0x03, 0xc2 },
146 { INTEL_FAM6_BROADWELL_CORE, 0x04, 0x28 },
147 { INTEL_FAM6_BROADWELL_GT3E, 0x01, 0x1b },
148 { INTEL_FAM6_BROADWELL_XEON_D, 0x02, 0x14 },
149 diff --git a/arch/x86/kernel/vm86_32.c b/arch/x86/kernel/vm86_32.c
150 index 5edb27f1a2c4..9d0b5af7db91 100644
151 --- a/arch/x86/kernel/vm86_32.c
152 +++ b/arch/x86/kernel/vm86_32.c
153 @@ -727,7 +727,8 @@ void handle_vm86_fault(struct kernel_vm86_regs *regs, long error_code)
154 return;
155
156 check_vip:
157 - if (VEFLAGS & X86_EFLAGS_VIP) {
158 + if ((VEFLAGS & (X86_EFLAGS_VIP | X86_EFLAGS_VIF)) ==
159 + (X86_EFLAGS_VIP | X86_EFLAGS_VIF)) {
160 save_v86_state(regs, VM86_STI);
161 return;
162 }
163 diff --git a/arch/x86/kvm/mmu.c b/arch/x86/kvm/mmu.c
164 index 2b6f8a4f2731..f438e0c4aa8c 100644
165 --- a/arch/x86/kvm/mmu.c
166 +++ b/arch/x86/kvm/mmu.c
167 @@ -2758,8 +2758,10 @@ static int set_spte(struct kvm_vcpu *vcpu, u64 *sptep,
168 else
169 pte_access &= ~ACC_WRITE_MASK;
170
171 + if (!kvm_is_mmio_pfn(pfn))
172 + spte |= shadow_me_mask;
173 +
174 spte |= (u64)pfn << PAGE_SHIFT;
175 - spte |= shadow_me_mask;
176
177 if (pte_access & ACC_WRITE_MASK) {
178
179 diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c
180 index 4c155ee0f89e..0133d26f16be 100644
181 --- a/arch/x86/mm/fault.c
182 +++ b/arch/x86/mm/fault.c
183 @@ -330,7 +330,7 @@ static noinline int vmalloc_fault(unsigned long address)
184 if (!pmd_k)
185 return -1;
186
187 - if (pmd_huge(*pmd_k))
188 + if (pmd_large(*pmd_k))
189 return 0;
190
191 pte_k = pte_offset_kernel(pmd_k, address);
192 @@ -479,7 +479,7 @@ static noinline int vmalloc_fault(unsigned long address)
193 if (pud_none(*pud) || pud_pfn(*pud) != pud_pfn(*pud_ref))
194 BUG();
195
196 - if (pud_huge(*pud))
197 + if (pud_large(*pud))
198 return 0;
199
200 pmd = pmd_offset(pud, address);
201 @@ -490,7 +490,7 @@ static noinline int vmalloc_fault(unsigned long address)
202 if (pmd_none(*pmd) || pmd_pfn(*pmd) != pmd_pfn(*pmd_ref))
203 BUG();
204
205 - if (pmd_huge(*pmd))
206 + if (pmd_large(*pmd))
207 return 0;
208
209 pte_ref = pte_offset_kernel(pmd_ref, address);
210 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
211 index 848242821ef3..1eff36a87595 100644
212 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
213 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
214 @@ -69,25 +69,18 @@ void amdgpu_connector_hotplug(struct drm_connector *connector)
215 /* don't do anything if sink is not display port, i.e.,
216 * passive dp->(dvi|hdmi) adaptor
217 */
218 - if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
219 - int saved_dpms = connector->dpms;
220 - /* Only turn off the display if it's physically disconnected */
221 - if (!amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd)) {
222 - drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
223 - } else if (amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
224 - /* Don't try to start link training before we
225 - * have the dpcd */
226 - if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
227 - return;
228 -
229 - /* set it to OFF so that drm_helper_connector_dpms()
230 - * won't return immediately since the current state
231 - * is ON at this point.
232 - */
233 - connector->dpms = DRM_MODE_DPMS_OFF;
234 - drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
235 - }
236 - connector->dpms = saved_dpms;
237 + if (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT &&
238 + amdgpu_display_hpd_sense(adev, amdgpu_connector->hpd.hpd) &&
239 + amdgpu_atombios_dp_needs_link_train(amdgpu_connector)) {
240 + /* Don't start link training before we have the DPCD */
241 + if (amdgpu_atombios_dp_get_dpcd(amdgpu_connector))
242 + return;
243 +
244 + /* Turn the connector off and back on immediately, which
245 + * will trigger link training
246 + */
247 + drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
248 + drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
249 }
250 }
251 }
252 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
253 index 7171968f261e..837332e84d78 100644
254 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
255 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
256 @@ -36,8 +36,6 @@ void amdgpu_gem_object_free(struct drm_gem_object *gobj)
257 struct amdgpu_bo *robj = gem_to_amdgpu_bo(gobj);
258
259 if (robj) {
260 - if (robj->gem_base.import_attach)
261 - drm_prime_gem_destroy(&robj->gem_base, robj->tbo.sg);
262 amdgpu_mn_unregister(robj);
263 amdgpu_bo_unref(&robj);
264 }
265 diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
266 index ffe483980362..4d08957d2108 100644
267 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
268 +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
269 @@ -46,6 +46,8 @@ static void amdgpu_ttm_bo_destroy(struct ttm_buffer_object *tbo)
270
271 amdgpu_bo_kunmap(bo);
272
273 + if (bo->gem_base.import_attach)
274 + drm_prime_gem_destroy(&bo->gem_base, bo->tbo.sg);
275 drm_gem_object_release(&bo->gem_base);
276 amdgpu_bo_unref(&bo->parent);
277 if (!list_empty(&bo->shadow_list)) {
278 diff --git a/drivers/gpu/drm/nouveau/nouveau_backlight.c b/drivers/gpu/drm/nouveau/nouveau_backlight.c
279 index 380f340204e8..f56f60f695e1 100644
280 --- a/drivers/gpu/drm/nouveau/nouveau_backlight.c
281 +++ b/drivers/gpu/drm/nouveau/nouveau_backlight.c
282 @@ -268,13 +268,13 @@ nouveau_backlight_init(struct drm_device *dev)
283 struct nvif_device *device = &drm->client.device;
284 struct drm_connector *connector;
285
286 + INIT_LIST_HEAD(&drm->bl_connectors);
287 +
288 if (apple_gmux_present()) {
289 NV_INFO(drm, "Apple GMUX detected: not registering Nouveau backlight interface\n");
290 return 0;
291 }
292
293 - INIT_LIST_HEAD(&drm->bl_connectors);
294 -
295 list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
296 if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS &&
297 connector->connector_type != DRM_MODE_CONNECTOR_eDP)
298 diff --git a/drivers/gpu/drm/radeon/radeon_gem.c b/drivers/gpu/drm/radeon/radeon_gem.c
299 index 3386452bd2f0..ac467b80edc7 100644
300 --- a/drivers/gpu/drm/radeon/radeon_gem.c
301 +++ b/drivers/gpu/drm/radeon/radeon_gem.c
302 @@ -34,8 +34,6 @@ void radeon_gem_object_free(struct drm_gem_object *gobj)
303 struct radeon_bo *robj = gem_to_radeon_bo(gobj);
304
305 if (robj) {
306 - if (robj->gem_base.import_attach)
307 - drm_prime_gem_destroy(&robj->gem_base, robj->tbo.sg);
308 radeon_mn_unregister(robj);
309 radeon_bo_unref(&robj);
310 }
311 diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
312 index 093594976126..baadb706c276 100644
313 --- a/drivers/gpu/drm/radeon/radeon_object.c
314 +++ b/drivers/gpu/drm/radeon/radeon_object.c
315 @@ -82,6 +82,8 @@ static void radeon_ttm_bo_destroy(struct ttm_buffer_object *tbo)
316 mutex_unlock(&bo->rdev->gem.mutex);
317 radeon_bo_clear_surface_reg(bo);
318 WARN_ON_ONCE(!list_empty(&bo->va));
319 + if (bo->gem_base.import_attach)
320 + drm_prime_gem_destroy(&bo->gem_base, bo->tbo.sg);
321 drm_gem_object_release(&bo->gem_base);
322 kfree(bo);
323 }
324 diff --git a/drivers/infiniband/sw/rdmavt/mr.c b/drivers/infiniband/sw/rdmavt/mr.c
325 index 42713511b53b..524e6134642e 100644
326 --- a/drivers/infiniband/sw/rdmavt/mr.c
327 +++ b/drivers/infiniband/sw/rdmavt/mr.c
328 @@ -489,11 +489,13 @@ static int rvt_check_refs(struct rvt_mregion *mr, const char *t)
329 unsigned long timeout;
330 struct rvt_dev_info *rdi = ib_to_rvt(mr->pd->device);
331
332 - if (percpu_ref_is_zero(&mr->refcount))
333 - return 0;
334 - /* avoid dma mr */
335 - if (mr->lkey)
336 + if (mr->lkey) {
337 + /* avoid dma mr */
338 rvt_dereg_clean_qps(mr);
339 + /* @mr was indexed on rcu protected @lkey_table */
340 + synchronize_rcu();
341 + }
342 +
343 timeout = wait_for_completion_timeout(&mr->comp, 5 * HZ);
344 if (!timeout) {
345 rvt_pr_err(rdi,
346 diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c
347 index e88395605e32..af57f8473a88 100644
348 --- a/drivers/irqchip/irq-gic-v3-its.c
349 +++ b/drivers/irqchip/irq-gic-v3-its.c
350 @@ -1310,7 +1310,7 @@ static struct irq_chip its_irq_chip = {
351 * This gives us (((1UL << id_bits) - 8192) >> 5) possible allocations.
352 */
353 #define IRQS_PER_CHUNK_SHIFT 5
354 -#define IRQS_PER_CHUNK (1 << IRQS_PER_CHUNK_SHIFT)
355 +#define IRQS_PER_CHUNK (1UL << IRQS_PER_CHUNK_SHIFT)
356 #define ITS_MAX_LPI_NRBITS 16 /* 64K LPIs */
357
358 static unsigned long *lpi_bitmap;
359 @@ -2026,11 +2026,10 @@ static struct its_device *its_create_device(struct its_node *its, u32 dev_id,
360
361 dev = kzalloc(sizeof(*dev), GFP_KERNEL);
362 /*
363 - * At least one bit of EventID is being used, hence a minimum
364 - * of two entries. No, the architecture doesn't let you
365 - * express an ITT with a single entry.
366 + * We allocate at least one chunk worth of LPIs bet device,
367 + * and thus that many ITEs. The device may require less though.
368 */
369 - nr_ites = max(2UL, roundup_pow_of_two(nvecs));
370 + nr_ites = max(IRQS_PER_CHUNK, roundup_pow_of_two(nvecs));
371 sz = nr_ites * its->ite_size;
372 sz = max(sz, ITS_ITT_ALIGN) + ITS_ITT_ALIGN - 1;
373 itt = kzalloc(sz, GFP_KERNEL);
374 diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
375 index 9603886737b5..2300c02ab5e6 100644
376 --- a/drivers/scsi/qla2xxx/qla_init.c
377 +++ b/drivers/scsi/qla2xxx/qla_init.c
378 @@ -102,11 +102,16 @@ qla2x00_async_iocb_timeout(void *data)
379 struct srb_iocb *lio = &sp->u.iocb_cmd;
380 struct event_arg ea;
381
382 - ql_dbg(ql_dbg_disc, fcport->vha, 0x2071,
383 - "Async-%s timeout - hdl=%x portid=%06x %8phC.\n",
384 - sp->name, sp->handle, fcport->d_id.b24, fcport->port_name);
385 + if (fcport) {
386 + ql_dbg(ql_dbg_disc, fcport->vha, 0x2071,
387 + "Async-%s timeout - hdl=%x portid=%06x %8phC.\n",
388 + sp->name, sp->handle, fcport->d_id.b24, fcport->port_name);
389
390 - fcport->flags &= ~FCF_ASYNC_SENT;
391 + fcport->flags &= ~FCF_ASYNC_SENT;
392 + } else {
393 + pr_info("Async-%s timeout - hdl=%x.\n",
394 + sp->name, sp->handle);
395 + }
396
397 switch (sp->type) {
398 case SRB_LOGIN_CMD:
399 diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c
400 index 78df7cfca568..d77dde89118e 100644
401 --- a/drivers/scsi/qla2xxx/qla_mid.c
402 +++ b/drivers/scsi/qla2xxx/qla_mid.c
403 @@ -582,8 +582,9 @@ qla25xx_delete_req_que(struct scsi_qla_host *vha, struct req_que *req)
404 ret = qla25xx_init_req_que(vha, req);
405 if (ret != QLA_SUCCESS)
406 return QLA_FUNCTION_FAILED;
407 +
408 + qla25xx_free_req_que(vha, req);
409 }
410 - qla25xx_free_req_que(vha, req);
411
412 return ret;
413 }
414 @@ -598,8 +599,9 @@ qla25xx_delete_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
415 ret = qla25xx_init_rsp_que(vha, rsp);
416 if (ret != QLA_SUCCESS)
417 return QLA_FUNCTION_FAILED;
418 +
419 + qla25xx_free_rsp_que(vha, rsp);
420 }
421 - qla25xx_free_rsp_que(vha, rsp);
422
423 return ret;
424 }
425 diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c
426 index cfe7654f6bd3..1e17175692d3 100644
427 --- a/drivers/scsi/qla2xxx/qla_os.c
428 +++ b/drivers/scsi/qla2xxx/qla_os.c
429 @@ -442,7 +442,7 @@ static int qla2x00_alloc_queues(struct qla_hw_data *ha, struct req_que *req,
430 ha->req_q_map[0] = req;
431 set_bit(0, ha->rsp_qid_map);
432 set_bit(0, ha->req_qid_map);
433 - return 1;
434 + return 0;
435
436 fail_qpair_map:
437 kfree(ha->base_qpair);
438 @@ -459,6 +459,9 @@ static int qla2x00_alloc_queues(struct qla_hw_data *ha, struct req_que *req,
439
440 static void qla2x00_free_req_que(struct qla_hw_data *ha, struct req_que *req)
441 {
442 + if (!ha->req_q_map)
443 + return;
444 +
445 if (IS_QLAFX00(ha)) {
446 if (req && req->ring_fx00)
447 dma_free_coherent(&ha->pdev->dev,
448 @@ -469,14 +472,17 @@ static void qla2x00_free_req_que(struct qla_hw_data *ha, struct req_que *req)
449 (req->length + 1) * sizeof(request_t),
450 req->ring, req->dma);
451
452 - if (req)
453 + if (req) {
454 kfree(req->outstanding_cmds);
455 -
456 - kfree(req);
457 + kfree(req);
458 + }
459 }
460
461 static void qla2x00_free_rsp_que(struct qla_hw_data *ha, struct rsp_que *rsp)
462 {
463 + if (!ha->rsp_q_map)
464 + return;
465 +
466 if (IS_QLAFX00(ha)) {
467 if (rsp && rsp->ring)
468 dma_free_coherent(&ha->pdev->dev,
469 @@ -487,7 +493,8 @@ static void qla2x00_free_rsp_que(struct qla_hw_data *ha, struct rsp_que *rsp)
470 (rsp->length + 1) * sizeof(response_t),
471 rsp->ring, rsp->dma);
472 }
473 - kfree(rsp);
474 + if (rsp)
475 + kfree(rsp);
476 }
477
478 static void qla2x00_free_queues(struct qla_hw_data *ha)
479 @@ -1710,6 +1717,8 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)
480 struct qla_tgt_cmd *cmd;
481 uint8_t trace = 0;
482
483 + if (!ha->req_q_map)
484 + return;
485 spin_lock_irqsave(&ha->hardware_lock, flags);
486 for (que = 0; que < ha->max_req_queues; que++) {
487 req = ha->req_q_map[que];
488 @@ -3063,14 +3072,14 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
489 /* Set up the irqs */
490 ret = qla2x00_request_irqs(ha, rsp);
491 if (ret)
492 - goto probe_hw_failed;
493 + goto probe_failed;
494
495 /* Alloc arrays of request and response ring ptrs */
496 - if (!qla2x00_alloc_queues(ha, req, rsp)) {
497 + if (qla2x00_alloc_queues(ha, req, rsp)) {
498 ql_log(ql_log_fatal, base_vha, 0x003d,
499 "Failed to allocate memory for queue pointers..."
500 "aborting.\n");
501 - goto probe_init_failed;
502 + goto probe_failed;
503 }
504
505 if (ha->mqenable && shost_use_blk_mq(host)) {
506 @@ -3347,15 +3356,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
507
508 return 0;
509
510 -probe_init_failed:
511 - qla2x00_free_req_que(ha, req);
512 - ha->req_q_map[0] = NULL;
513 - clear_bit(0, ha->req_qid_map);
514 - qla2x00_free_rsp_que(ha, rsp);
515 - ha->rsp_q_map[0] = NULL;
516 - clear_bit(0, ha->rsp_qid_map);
517 - ha->max_req_queues = ha->max_rsp_queues = 0;
518 -
519 probe_failed:
520 if (base_vha->timer_active)
521 qla2x00_stop_timer(base_vha);
522 @@ -4435,11 +4435,17 @@ qla2x00_mem_free(struct qla_hw_data *ha)
523 if (ha->init_cb)
524 dma_free_coherent(&ha->pdev->dev, ha->init_cb_size,
525 ha->init_cb, ha->init_cb_dma);
526 - vfree(ha->optrom_buffer);
527 - kfree(ha->nvram);
528 - kfree(ha->npiv_info);
529 - kfree(ha->swl);
530 - kfree(ha->loop_id_map);
531 +
532 + if (ha->optrom_buffer)
533 + vfree(ha->optrom_buffer);
534 + if (ha->nvram)
535 + kfree(ha->nvram);
536 + if (ha->npiv_info)
537 + kfree(ha->npiv_info);
538 + if (ha->swl)
539 + kfree(ha->swl);
540 + if (ha->loop_id_map)
541 + kfree(ha->loop_id_map);
542
543 ha->srb_mempool = NULL;
544 ha->ctx_mempool = NULL;
545 @@ -4455,6 +4461,15 @@ qla2x00_mem_free(struct qla_hw_data *ha)
546 ha->ex_init_cb_dma = 0;
547 ha->async_pd = NULL;
548 ha->async_pd_dma = 0;
549 + ha->loop_id_map = NULL;
550 + ha->npiv_info = NULL;
551 + ha->optrom_buffer = NULL;
552 + ha->swl = NULL;
553 + ha->nvram = NULL;
554 + ha->mctp_dump = NULL;
555 + ha->dcbx_tlv = NULL;
556 + ha->xgmac_data = NULL;
557 + ha->sfp_data = NULL;
558
559 ha->s_dma_pool = NULL;
560 ha->dl_dma_pool = NULL;
561 diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
562 index 040a76011ffa..d6fe08de59a0 100644
563 --- a/drivers/scsi/qla2xxx/qla_target.c
564 +++ b/drivers/scsi/qla2xxx/qla_target.c
565 @@ -971,6 +971,7 @@ static void qlt_free_session_done(struct work_struct *work)
566
567 logo.id = sess->d_id;
568 logo.cmd_count = 0;
569 + sess->send_els_logo = 0;
570 qlt_send_first_logo(vha, &logo);
571 }
572
573 diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
574 index ea910acb4bb0..fc28819253f7 100644
575 --- a/drivers/usb/dwc3/core.h
576 +++ b/drivers/usb/dwc3/core.h
577 @@ -166,13 +166,15 @@
578 #define DWC3_GDBGFIFOSPACE_TYPE(n) (((n) << 5) & 0x1e0)
579 #define DWC3_GDBGFIFOSPACE_SPACE_AVAILABLE(n) (((n) >> 16) & 0xffff)
580
581 -#define DWC3_TXFIFOQ 1
582 -#define DWC3_RXFIFOQ 3
583 -#define DWC3_TXREQQ 5
584 -#define DWC3_RXREQQ 7
585 -#define DWC3_RXINFOQ 9
586 -#define DWC3_DESCFETCHQ 13
587 -#define DWC3_EVENTQ 15
588 +#define DWC3_TXFIFOQ 0
589 +#define DWC3_RXFIFOQ 1
590 +#define DWC3_TXREQQ 2
591 +#define DWC3_RXREQQ 3
592 +#define DWC3_RXINFOQ 4
593 +#define DWC3_PSTATQ 5
594 +#define DWC3_DESCFETCHQ 6
595 +#define DWC3_EVENTQ 7
596 +#define DWC3_AUXEVENTQ 8
597
598 /* Global RX Threshold Configuration Register */
599 #define DWC3_GRXTHRCFG_MAXRXBURSTSIZE(n) (((n) & 0x1f) << 19)
600 diff --git a/drivers/usb/gadget/udc/bdc/bdc_pci.c b/drivers/usb/gadget/udc/bdc/bdc_pci.c
601 index 02968842b359..708e36f530d8 100644
602 --- a/drivers/usb/gadget/udc/bdc/bdc_pci.c
603 +++ b/drivers/usb/gadget/udc/bdc/bdc_pci.c
604 @@ -82,6 +82,7 @@ static int bdc_pci_probe(struct pci_dev *pci, const struct pci_device_id *id)
605 if (ret) {
606 dev_err(&pci->dev,
607 "couldn't add resources to bdc device\n");
608 + platform_device_put(bdc);
609 return ret;
610 }
611
612 diff --git a/fs/aio.c b/fs/aio.c
613 index 5a2487217072..c3ace7833a03 100644
614 --- a/fs/aio.c
615 +++ b/fs/aio.c
616 @@ -68,9 +68,9 @@ struct aio_ring {
617 #define AIO_RING_PAGES 8
618
619 struct kioctx_table {
620 - struct rcu_head rcu;
621 - unsigned nr;
622 - struct kioctx *table[];
623 + struct rcu_head rcu;
624 + unsigned nr;
625 + struct kioctx __rcu *table[];
626 };
627
628 struct kioctx_cpu {
629 @@ -115,7 +115,8 @@ struct kioctx {
630 struct page **ring_pages;
631 long nr_pages;
632
633 - struct work_struct free_work;
634 + struct rcu_head free_rcu;
635 + struct work_struct free_work; /* see free_ioctx() */
636
637 /*
638 * signals when all in-flight requests are done
639 @@ -329,7 +330,7 @@ static int aio_ring_mremap(struct vm_area_struct *vma)
640 for (i = 0; i < table->nr; i++) {
641 struct kioctx *ctx;
642
643 - ctx = table->table[i];
644 + ctx = rcu_dereference(table->table[i]);
645 if (ctx && ctx->aio_ring_file == file) {
646 if (!atomic_read(&ctx->dead)) {
647 ctx->user_id = ctx->mmap_base = vma->vm_start;
648 @@ -588,6 +589,12 @@ static int kiocb_cancel(struct aio_kiocb *kiocb)
649 return cancel(&kiocb->common);
650 }
651
652 +/*
653 + * free_ioctx() should be RCU delayed to synchronize against the RCU
654 + * protected lookup_ioctx() and also needs process context to call
655 + * aio_free_ring(), so the double bouncing through kioctx->free_rcu and
656 + * ->free_work.
657 + */
658 static void free_ioctx(struct work_struct *work)
659 {
660 struct kioctx *ctx = container_of(work, struct kioctx, free_work);
661 @@ -601,6 +608,14 @@ static void free_ioctx(struct work_struct *work)
662 kmem_cache_free(kioctx_cachep, ctx);
663 }
664
665 +static void free_ioctx_rcufn(struct rcu_head *head)
666 +{
667 + struct kioctx *ctx = container_of(head, struct kioctx, free_rcu);
668 +
669 + INIT_WORK(&ctx->free_work, free_ioctx);
670 + schedule_work(&ctx->free_work);
671 +}
672 +
673 static void free_ioctx_reqs(struct percpu_ref *ref)
674 {
675 struct kioctx *ctx = container_of(ref, struct kioctx, reqs);
676 @@ -609,8 +624,8 @@ static void free_ioctx_reqs(struct percpu_ref *ref)
677 if (ctx->rq_wait && atomic_dec_and_test(&ctx->rq_wait->count))
678 complete(&ctx->rq_wait->comp);
679
680 - INIT_WORK(&ctx->free_work, free_ioctx);
681 - schedule_work(&ctx->free_work);
682 + /* Synchronize against RCU protected table->table[] dereferences */
683 + call_rcu(&ctx->free_rcu, free_ioctx_rcufn);
684 }
685
686 /*
687 @@ -651,9 +666,9 @@ static int ioctx_add_table(struct kioctx *ctx, struct mm_struct *mm)
688 while (1) {
689 if (table)
690 for (i = 0; i < table->nr; i++)
691 - if (!table->table[i]) {
692 + if (!rcu_access_pointer(table->table[i])) {
693 ctx->id = i;
694 - table->table[i] = ctx;
695 + rcu_assign_pointer(table->table[i], ctx);
696 spin_unlock(&mm->ioctx_lock);
697
698 /* While kioctx setup is in progress,
699 @@ -834,11 +849,11 @@ static int kill_ioctx(struct mm_struct *mm, struct kioctx *ctx,
700 }
701
702 table = rcu_dereference_raw(mm->ioctx_table);
703 - WARN_ON(ctx != table->table[ctx->id]);
704 - table->table[ctx->id] = NULL;
705 + WARN_ON(ctx != rcu_access_pointer(table->table[ctx->id]));
706 + RCU_INIT_POINTER(table->table[ctx->id], NULL);
707 spin_unlock(&mm->ioctx_lock);
708
709 - /* percpu_ref_kill() will do the necessary call_rcu() */
710 + /* free_ioctx_reqs() will do the necessary RCU synchronization */
711 wake_up_all(&ctx->wait);
712
713 /*
714 @@ -880,7 +895,8 @@ void exit_aio(struct mm_struct *mm)
715
716 skipped = 0;
717 for (i = 0; i < table->nr; ++i) {
718 - struct kioctx *ctx = table->table[i];
719 + struct kioctx *ctx =
720 + rcu_dereference_protected(table->table[i], true);
721
722 if (!ctx) {
723 skipped++;
724 @@ -1069,7 +1085,7 @@ static struct kioctx *lookup_ioctx(unsigned long ctx_id)
725 if (!table || id >= table->nr)
726 goto out;
727
728 - ctx = table->table[id];
729 + ctx = rcu_dereference(table->table[id]);
730 if (ctx && ctx->user_id == ctx_id) {
731 percpu_ref_get(&ctx->users);
732 ret = ctx;
733 diff --git a/fs/btrfs/backref.c b/fs/btrfs/backref.c
734 index b517ef1477ea..0531cb9a3ba9 100644
735 --- a/fs/btrfs/backref.c
736 +++ b/fs/btrfs/backref.c
737 @@ -1252,7 +1252,16 @@ static int find_parent_nodes(struct btrfs_trans_handle *trans,
738 while (node) {
739 ref = rb_entry(node, struct prelim_ref, rbnode);
740 node = rb_next(&ref->rbnode);
741 - WARN_ON(ref->count < 0);
742 + /*
743 + * ref->count < 0 can happen here if there are delayed
744 + * refs with a node->action of BTRFS_DROP_DELAYED_REF.
745 + * prelim_ref_insert() relies on this when merging
746 + * identical refs to keep the overall count correct.
747 + * prelim_ref_insert() will merge only those refs
748 + * which compare identically. Any refs having
749 + * e.g. different offsets would not be merged,
750 + * and would retain their original ref->count < 0.
751 + */
752 if (roots && ref->count && ref->root_id && ref->parent == 0) {
753 if (sc && sc->root_objectid &&
754 ref->root_id != sc->root_objectid) {
755 @@ -1496,6 +1505,7 @@ int btrfs_check_shared(struct btrfs_root *root, u64 inum, u64 bytenr)
756 if (!node)
757 break;
758 bytenr = node->val;
759 + shared.share_count = 0;
760 cond_resched();
761 }
762
763 diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c
764 index 6154825c30e1..32b186c5694c 100644
765 --- a/fs/btrfs/raid56.c
766 +++ b/fs/btrfs/raid56.c
767 @@ -1348,6 +1348,7 @@ static int find_bio_stripe(struct btrfs_raid_bio *rbio,
768 stripe_start = stripe->physical;
769 if (physical >= stripe_start &&
770 physical < stripe_start + rbio->stripe_len &&
771 + stripe->dev->bdev &&
772 bio->bi_disk == stripe->dev->bdev->bd_disk &&
773 bio->bi_partno == stripe->dev->bdev->bd_partno) {
774 return i;
775 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
776 index bc534fafacf9..71b3cd634436 100644
777 --- a/fs/btrfs/volumes.c
778 +++ b/fs/btrfs/volumes.c
779 @@ -589,6 +589,7 @@ void btrfs_free_stale_device(struct btrfs_device *cur_dev)
780 btrfs_sysfs_remove_fsid(fs_devs);
781 list_del(&fs_devs->list);
782 free_fs_devices(fs_devs);
783 + break;
784 } else {
785 fs_devs->num_devices--;
786 list_del(&dev->dev_list);
787 @@ -4733,10 +4734,13 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
788 ndevs = min(ndevs, devs_max);
789
790 /*
791 - * the primary goal is to maximize the number of stripes, so use as many
792 - * devices as possible, even if the stripes are not maximum sized.
793 + * The primary goal is to maximize the number of stripes, so use as
794 + * many devices as possible, even if the stripes are not maximum sized.
795 + *
796 + * The DUP profile stores more than one stripe per device, the
797 + * max_avail is the total size so we have to adjust.
798 */
799 - stripe_size = devices_info[ndevs-1].max_avail;
800 + stripe_size = div_u64(devices_info[ndevs - 1].max_avail, dev_stripes);
801 num_stripes = ndevs * dev_stripes;
802
803 /*
804 @@ -4771,8 +4775,6 @@ static int __btrfs_alloc_chunk(struct btrfs_trans_handle *trans,
805 stripe_size = devices_info[ndevs-1].max_avail;
806 }
807
808 - stripe_size = div_u64(stripe_size, dev_stripes);
809 -
810 /* align to BTRFS_STRIPE_LEN */
811 stripe_size = round_down(stripe_size, BTRFS_STRIPE_LEN);
812
813 @@ -7080,10 +7082,24 @@ int btrfs_run_dev_stats(struct btrfs_trans_handle *trans,
814
815 mutex_lock(&fs_devices->device_list_mutex);
816 list_for_each_entry(device, &fs_devices->devices, dev_list) {
817 - if (!device->dev_stats_valid || !btrfs_dev_stats_dirty(device))
818 + stats_cnt = atomic_read(&device->dev_stats_ccnt);
819 + if (!device->dev_stats_valid || stats_cnt == 0)
820 continue;
821
822 - stats_cnt = atomic_read(&device->dev_stats_ccnt);
823 +
824 + /*
825 + * There is a LOAD-LOAD control dependency between the value of
826 + * dev_stats_ccnt and updating the on-disk values which requires
827 + * reading the in-memory counters. Such control dependencies
828 + * require explicit read memory barriers.
829 + *
830 + * This memory barriers pairs with smp_mb__before_atomic in
831 + * btrfs_dev_stat_inc/btrfs_dev_stat_set and with the full
832 + * barrier implied by atomic_xchg in
833 + * btrfs_dev_stats_read_and_reset
834 + */
835 + smp_rmb();
836 +
837 ret = update_dev_stat_item(trans, fs_info, device);
838 if (!ret)
839 atomic_sub(stats_cnt, &device->dev_stats_ccnt);
840 diff --git a/fs/btrfs/volumes.h b/fs/btrfs/volumes.h
841 index 6108fdfec67f..c5dd48eb7b3d 100644
842 --- a/fs/btrfs/volumes.h
843 +++ b/fs/btrfs/volumes.h
844 @@ -498,6 +498,12 @@ static inline void btrfs_dev_stat_inc(struct btrfs_device *dev,
845 int index)
846 {
847 atomic_inc(dev->dev_stat_values + index);
848 + /*
849 + * This memory barrier orders stores updating statistics before stores
850 + * updating dev_stats_ccnt.
851 + *
852 + * It pairs with smp_rmb() in btrfs_run_dev_stats().
853 + */
854 smp_mb__before_atomic();
855 atomic_inc(&dev->dev_stats_ccnt);
856 }
857 @@ -523,6 +529,12 @@ static inline void btrfs_dev_stat_set(struct btrfs_device *dev,
858 int index, unsigned long val)
859 {
860 atomic_set(dev->dev_stat_values + index, val);
861 + /*
862 + * This memory barrier orders stores updating statistics before stores
863 + * updating dev_stats_ccnt.
864 + *
865 + * It pairs with smp_rmb() in btrfs_run_dev_stats().
866 + */
867 smp_mb__before_atomic();
868 atomic_inc(&dev->dev_stats_ccnt);
869 }
870 diff --git a/fs/dcache.c b/fs/dcache.c
871 index b8d999a5768b..a1417787e269 100644
872 --- a/fs/dcache.c
873 +++ b/fs/dcache.c
874 @@ -644,11 +644,16 @@ static inline struct dentry *lock_parent(struct dentry *dentry)
875 spin_unlock(&parent->d_lock);
876 goto again;
877 }
878 - rcu_read_unlock();
879 - if (parent != dentry)
880 + if (parent != dentry) {
881 spin_lock_nested(&dentry->d_lock, DENTRY_D_LOCK_NESTED);
882 - else
883 + if (unlikely(dentry->d_lockref.count < 0)) {
884 + spin_unlock(&parent->d_lock);
885 + parent = NULL;
886 + }
887 + } else {
888 parent = NULL;
889 + }
890 + rcu_read_unlock();
891 return parent;
892 }
893
894 diff --git a/fs/namei.c b/fs/namei.c
895 index cbe24e367a70..f839b0750ca3 100644
896 --- a/fs/namei.c
897 +++ b/fs/namei.c
898 @@ -578,9 +578,10 @@ static int __nd_alloc_stack(struct nameidata *nd)
899 static bool path_connected(const struct path *path)
900 {
901 struct vfsmount *mnt = path->mnt;
902 + struct super_block *sb = mnt->mnt_sb;
903
904 - /* Only bind mounts can have disconnected paths */
905 - if (mnt->mnt_root == mnt->mnt_sb->s_root)
906 + /* Bind mounts and multi-root filesystems can have disconnected paths */
907 + if (!(sb->s_iflags & SB_I_MULTIROOT) && (mnt->mnt_root == sb->s_root))
908 return true;
909
910 return is_subdir(path->dentry, mnt->mnt_root);
911 diff --git a/fs/nfs/super.c b/fs/nfs/super.c
912 index 216f67d628b3..38de09b08e96 100644
913 --- a/fs/nfs/super.c
914 +++ b/fs/nfs/super.c
915 @@ -2623,6 +2623,8 @@ struct dentry *nfs_fs_mount_common(struct nfs_server *server,
916 /* initial superblock/root creation */
917 mount_info->fill_super(s, mount_info);
918 nfs_get_cache_cookie(s, mount_info->parsed, mount_info->cloned);
919 + if (!(server->flags & NFS_MOUNT_UNSHARED))
920 + s->s_iflags |= SB_I_MULTIROOT;
921 }
922
923 mntroot = nfs_get_root(s, mount_info->mntfh, dev_name);
924 diff --git a/include/linux/fs.h b/include/linux/fs.h
925 index d54f41a63dbf..cc613f20e5a6 100644
926 --- a/include/linux/fs.h
927 +++ b/include/linux/fs.h
928 @@ -1312,6 +1312,7 @@ extern int send_sigurg(struct fown_struct *fown);
929 #define SB_I_CGROUPWB 0x00000001 /* cgroup-aware writeback enabled */
930 #define SB_I_NOEXEC 0x00000002 /* Ignore executables on this fs */
931 #define SB_I_NODEV 0x00000004 /* Ignore devices on this fs */
932 +#define SB_I_MULTIROOT 0x00000008 /* Multiple roots to the dentry tree */
933
934 /* sb->s_iflags to limit user namespace mounts */
935 #define SB_I_USERNS_VISIBLE 0x00000010 /* fstype already mounted */
936 diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h
937 index 14b74f22d43c..bacb499c512c 100644
938 --- a/include/linux/irqchip/arm-gic-v3.h
939 +++ b/include/linux/irqchip/arm-gic-v3.h
940 @@ -501,6 +501,7 @@
941
942 #define ICH_HCR_EN (1 << 0)
943 #define ICH_HCR_UIE (1 << 1)
944 +#define ICH_HCR_NPIE (1 << 3)
945 #define ICH_HCR_TC (1 << 10)
946 #define ICH_HCR_TALL0 (1 << 11)
947 #define ICH_HCR_TALL1 (1 << 12)
948 diff --git a/include/linux/irqchip/arm-gic.h b/include/linux/irqchip/arm-gic.h
949 index d3453ee072fc..68d8b1f73682 100644
950 --- a/include/linux/irqchip/arm-gic.h
951 +++ b/include/linux/irqchip/arm-gic.h
952 @@ -84,6 +84,7 @@
953
954 #define GICH_HCR_EN (1 << 0)
955 #define GICH_HCR_UIE (1 << 1)
956 +#define GICH_HCR_NPIE (1 << 3)
957
958 #define GICH_LR_VIRTUALID (0x3ff << 0)
959 #define GICH_LR_PHYSID_CPUID_SHIFT (10)
960 diff --git a/sound/core/oss/pcm_oss.c b/sound/core/oss/pcm_oss.c
961 index c2db7e905f7d..012881461058 100644
962 --- a/sound/core/oss/pcm_oss.c
963 +++ b/sound/core/oss/pcm_oss.c
964 @@ -1762,10 +1762,9 @@ static int snd_pcm_oss_get_formats(struct snd_pcm_oss_file *pcm_oss_file)
965 return -ENOMEM;
966 _snd_pcm_hw_params_any(params);
967 err = snd_pcm_hw_refine(substream, params);
968 - format_mask = hw_param_mask_c(params, SNDRV_PCM_HW_PARAM_FORMAT);
969 - kfree(params);
970 if (err < 0)
971 - return err;
972 + goto error;
973 + format_mask = hw_param_mask_c(params, SNDRV_PCM_HW_PARAM_FORMAT);
974 for (fmt = 0; fmt < 32; ++fmt) {
975 if (snd_mask_test(format_mask, fmt)) {
976 int f = snd_pcm_oss_format_to(fmt);
977 @@ -1773,7 +1772,10 @@ static int snd_pcm_oss_get_formats(struct snd_pcm_oss_file *pcm_oss_file)
978 formats |= f;
979 }
980 }
981 - return formats;
982 +
983 + error:
984 + kfree(params);
985 + return err < 0 ? err : formats;
986 }
987
988 static int snd_pcm_oss_set_format(struct snd_pcm_oss_file *pcm_oss_file, int format)
989 diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
990 index 1f3aa466ac9b..a4c571cb3b87 100644
991 --- a/sound/core/seq/seq_clientmgr.c
992 +++ b/sound/core/seq/seq_clientmgr.c
993 @@ -255,12 +255,12 @@ static int seq_free_client1(struct snd_seq_client *client)
994
995 if (!client)
996 return 0;
997 - snd_seq_delete_all_ports(client);
998 - snd_seq_queue_client_leave(client->number);
999 spin_lock_irqsave(&clients_lock, flags);
1000 clienttablock[client->number] = 1;
1001 clienttab[client->number] = NULL;
1002 spin_unlock_irqrestore(&clients_lock, flags);
1003 + snd_seq_delete_all_ports(client);
1004 + snd_seq_queue_client_leave(client->number);
1005 snd_use_lock_sync(&client->use_lock);
1006 snd_seq_queue_client_termination(client->number);
1007 if (client->pool)
1008 diff --git a/sound/core/seq/seq_prioq.c b/sound/core/seq/seq_prioq.c
1009 index bc1c8488fc2a..2bc6759e4adc 100644
1010 --- a/sound/core/seq/seq_prioq.c
1011 +++ b/sound/core/seq/seq_prioq.c
1012 @@ -87,7 +87,7 @@ void snd_seq_prioq_delete(struct snd_seq_prioq **fifo)
1013 if (f->cells > 0) {
1014 /* drain prioQ */
1015 while (f->cells > 0)
1016 - snd_seq_cell_free(snd_seq_prioq_cell_out(f));
1017 + snd_seq_cell_free(snd_seq_prioq_cell_out(f, NULL));
1018 }
1019
1020 kfree(f);
1021 @@ -214,8 +214,18 @@ int snd_seq_prioq_cell_in(struct snd_seq_prioq * f,
1022 return 0;
1023 }
1024
1025 +/* return 1 if the current time >= event timestamp */
1026 +static int event_is_ready(struct snd_seq_event *ev, void *current_time)
1027 +{
1028 + if ((ev->flags & SNDRV_SEQ_TIME_STAMP_MASK) == SNDRV_SEQ_TIME_STAMP_TICK)
1029 + return snd_seq_compare_tick_time(current_time, &ev->time.tick);
1030 + else
1031 + return snd_seq_compare_real_time(current_time, &ev->time.time);
1032 +}
1033 +
1034 /* dequeue cell from prioq */
1035 -struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f)
1036 +struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f,
1037 + void *current_time)
1038 {
1039 struct snd_seq_event_cell *cell;
1040 unsigned long flags;
1041 @@ -227,6 +237,8 @@ struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f)
1042 spin_lock_irqsave(&f->lock, flags);
1043
1044 cell = f->head;
1045 + if (cell && current_time && !event_is_ready(&cell->event, current_time))
1046 + cell = NULL;
1047 if (cell) {
1048 f->head = cell->next;
1049
1050 @@ -252,18 +264,6 @@ int snd_seq_prioq_avail(struct snd_seq_prioq * f)
1051 return f->cells;
1052 }
1053
1054 -
1055 -/* peek at cell at the head of the prioq */
1056 -struct snd_seq_event_cell *snd_seq_prioq_cell_peek(struct snd_seq_prioq * f)
1057 -{
1058 - if (f == NULL) {
1059 - pr_debug("ALSA: seq: snd_seq_prioq_cell_in() called with NULL prioq\n");
1060 - return NULL;
1061 - }
1062 - return f->head;
1063 -}
1064 -
1065 -
1066 static inline int prioq_match(struct snd_seq_event_cell *cell,
1067 int client, int timestamp)
1068 {
1069 diff --git a/sound/core/seq/seq_prioq.h b/sound/core/seq/seq_prioq.h
1070 index d38bb78d9345..2c315ca10fc4 100644
1071 --- a/sound/core/seq/seq_prioq.h
1072 +++ b/sound/core/seq/seq_prioq.h
1073 @@ -44,14 +44,12 @@ void snd_seq_prioq_delete(struct snd_seq_prioq **fifo);
1074 int snd_seq_prioq_cell_in(struct snd_seq_prioq *f, struct snd_seq_event_cell *cell);
1075
1076 /* dequeue cell from prioq */
1077 -struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f);
1078 +struct snd_seq_event_cell *snd_seq_prioq_cell_out(struct snd_seq_prioq *f,
1079 + void *current_time);
1080
1081 /* return number of events available in prioq */
1082 int snd_seq_prioq_avail(struct snd_seq_prioq *f);
1083
1084 -/* peek at cell at the head of the prioq */
1085 -struct snd_seq_event_cell *snd_seq_prioq_cell_peek(struct snd_seq_prioq *f);
1086 -
1087 /* client left queue */
1088 void snd_seq_prioq_leave(struct snd_seq_prioq *f, int client, int timestamp);
1089
1090 diff --git a/sound/core/seq/seq_queue.c b/sound/core/seq/seq_queue.c
1091 index 79e0c5604ef8..1a6dc4ff44a6 100644
1092 --- a/sound/core/seq/seq_queue.c
1093 +++ b/sound/core/seq/seq_queue.c
1094 @@ -277,30 +277,20 @@ void snd_seq_check_queue(struct snd_seq_queue *q, int atomic, int hop)
1095
1096 __again:
1097 /* Process tick queue... */
1098 - while ((cell = snd_seq_prioq_cell_peek(q->tickq)) != NULL) {
1099 - if (snd_seq_compare_tick_time(&q->timer->tick.cur_tick,
1100 - &cell->event.time.tick)) {
1101 - cell = snd_seq_prioq_cell_out(q->tickq);
1102 - if (cell)
1103 - snd_seq_dispatch_event(cell, atomic, hop);
1104 - } else {
1105 - /* event remains in the queue */
1106 + for (;;) {
1107 + cell = snd_seq_prioq_cell_out(q->tickq,
1108 + &q->timer->tick.cur_tick);
1109 + if (!cell)
1110 break;
1111 - }
1112 + snd_seq_dispatch_event(cell, atomic, hop);
1113 }
1114
1115 -
1116 /* Process time queue... */
1117 - while ((cell = snd_seq_prioq_cell_peek(q->timeq)) != NULL) {
1118 - if (snd_seq_compare_real_time(&q->timer->cur_time,
1119 - &cell->event.time.time)) {
1120 - cell = snd_seq_prioq_cell_out(q->timeq);
1121 - if (cell)
1122 - snd_seq_dispatch_event(cell, atomic, hop);
1123 - } else {
1124 - /* event remains in the queue */
1125 + for (;;) {
1126 + cell = snd_seq_prioq_cell_out(q->timeq, &q->timer->cur_time);
1127 + if (!cell)
1128 break;
1129 - }
1130 + snd_seq_dispatch_event(cell, atomic, hop);
1131 }
1132
1133 /* free lock */
1134 diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
1135 index 96143df19b21..d5017adf9feb 100644
1136 --- a/sound/pci/hda/hda_intel.c
1137 +++ b/sound/pci/hda/hda_intel.c
1138 @@ -181,11 +181,15 @@ static const struct kernel_param_ops param_ops_xint = {
1139 };
1140 #define param_check_xint param_check_int
1141
1142 -static int power_save = -1;
1143 +static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
1144 module_param(power_save, xint, 0644);
1145 MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
1146 "(in second, 0 = disable).");
1147
1148 +static bool pm_blacklist = true;
1149 +module_param(pm_blacklist, bool, 0644);
1150 +MODULE_PARM_DESC(pm_blacklist, "Enable power-management blacklist");
1151 +
1152 /* reset the HD-audio controller in power save mode.
1153 * this may give more power-saving, but will take longer time to
1154 * wake up.
1155 @@ -2300,10 +2304,9 @@ static int azx_probe_continue(struct azx *chip)
1156
1157 val = power_save;
1158 #ifdef CONFIG_PM
1159 - if (val == -1) {
1160 + if (pm_blacklist) {
1161 const struct snd_pci_quirk *q;
1162
1163 - val = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
1164 q = snd_pci_quirk_lookup(chip->pci, power_save_blacklist);
1165 if (q && val) {
1166 dev_info(chip->card->dev, "device %04x:%04x is on the power_save blacklist, forcing power_save to 0\n",
1167 diff --git a/tools/testing/selftests/x86/entry_from_vm86.c b/tools/testing/selftests/x86/entry_from_vm86.c
1168 index d075ea0e5ca1..ade443a88421 100644
1169 --- a/tools/testing/selftests/x86/entry_from_vm86.c
1170 +++ b/tools/testing/selftests/x86/entry_from_vm86.c
1171 @@ -95,6 +95,31 @@ asm (
1172 "int3\n\t"
1173 "vmcode_int80:\n\t"
1174 "int $0x80\n\t"
1175 + "vmcode_popf_hlt:\n\t"
1176 + "push %ax\n\t"
1177 + "popf\n\t"
1178 + "hlt\n\t"
1179 + "vmcode_umip:\n\t"
1180 + /* addressing via displacements */
1181 + "smsw (2052)\n\t"
1182 + "sidt (2054)\n\t"
1183 + "sgdt (2060)\n\t"
1184 + /* addressing via registers */
1185 + "mov $2066, %bx\n\t"
1186 + "smsw (%bx)\n\t"
1187 + "mov $2068, %bx\n\t"
1188 + "sidt (%bx)\n\t"
1189 + "mov $2074, %bx\n\t"
1190 + "sgdt (%bx)\n\t"
1191 + /* register operands, only for smsw */
1192 + "smsw %ax\n\t"
1193 + "mov %ax, (2080)\n\t"
1194 + "int3\n\t"
1195 + "vmcode_umip_str:\n\t"
1196 + "str %eax\n\t"
1197 + "vmcode_umip_sldt:\n\t"
1198 + "sldt %eax\n\t"
1199 + "int3\n\t"
1200 ".size vmcode, . - vmcode\n\t"
1201 "end_vmcode:\n\t"
1202 ".code32\n\t"
1203 @@ -103,7 +128,8 @@ asm (
1204
1205 extern unsigned char vmcode[], end_vmcode[];
1206 extern unsigned char vmcode_bound[], vmcode_sysenter[], vmcode_syscall[],
1207 - vmcode_sti[], vmcode_int3[], vmcode_int80[];
1208 + vmcode_sti[], vmcode_int3[], vmcode_int80[], vmcode_popf_hlt[],
1209 + vmcode_umip[], vmcode_umip_str[], vmcode_umip_sldt[];
1210
1211 /* Returns false if the test was skipped. */
1212 static bool do_test(struct vm86plus_struct *v86, unsigned long eip,
1213 @@ -153,13 +179,75 @@ static bool do_test(struct vm86plus_struct *v86, unsigned long eip,
1214 (VM86_TYPE(ret) == rettype && VM86_ARG(ret) == retarg)) {
1215 printf("[OK]\tReturned correctly\n");
1216 } else {
1217 - printf("[FAIL]\tIncorrect return reason\n");
1218 + printf("[FAIL]\tIncorrect return reason (started at eip = 0x%lx, ended at eip = 0x%lx)\n", eip, v86->regs.eip);
1219 nerrs++;
1220 }
1221
1222 return true;
1223 }
1224
1225 +void do_umip_tests(struct vm86plus_struct *vm86, unsigned char *test_mem)
1226 +{
1227 + struct table_desc {
1228 + unsigned short limit;
1229 + unsigned long base;
1230 + } __attribute__((packed));
1231 +
1232 + /* Initialize variables with arbitrary values */
1233 + struct table_desc gdt1 = { .base = 0x3c3c3c3c, .limit = 0x9999 };
1234 + struct table_desc gdt2 = { .base = 0x1a1a1a1a, .limit = 0xaeae };
1235 + struct table_desc idt1 = { .base = 0x7b7b7b7b, .limit = 0xf1f1 };
1236 + struct table_desc idt2 = { .base = 0x89898989, .limit = 0x1313 };
1237 + unsigned short msw1 = 0x1414, msw2 = 0x2525, msw3 = 3737;
1238 +
1239 + /* UMIP -- exit with INT3 unless kernel emulation did not trap #GP */
1240 + do_test(vm86, vmcode_umip - vmcode, VM86_TRAP, 3, "UMIP tests");
1241 +
1242 + /* Results from displacement-only addressing */
1243 + msw1 = *(unsigned short *)(test_mem + 2052);
1244 + memcpy(&idt1, test_mem + 2054, sizeof(idt1));
1245 + memcpy(&gdt1, test_mem + 2060, sizeof(gdt1));
1246 +
1247 + /* Results from register-indirect addressing */
1248 + msw2 = *(unsigned short *)(test_mem + 2066);
1249 + memcpy(&idt2, test_mem + 2068, sizeof(idt2));
1250 + memcpy(&gdt2, test_mem + 2074, sizeof(gdt2));
1251 +
1252 + /* Results when using register operands */
1253 + msw3 = *(unsigned short *)(test_mem + 2080);
1254 +
1255 + printf("[INFO]\tResult from SMSW:[0x%04x]\n", msw1);
1256 + printf("[INFO]\tResult from SIDT: limit[0x%04x]base[0x%08lx]\n",
1257 + idt1.limit, idt1.base);
1258 + printf("[INFO]\tResult from SGDT: limit[0x%04x]base[0x%08lx]\n",
1259 + gdt1.limit, gdt1.base);
1260 +
1261 + if (msw1 != msw2 || msw1 != msw3)
1262 + printf("[FAIL]\tAll the results of SMSW should be the same.\n");
1263 + else
1264 + printf("[PASS]\tAll the results from SMSW are identical.\n");
1265 +
1266 + if (memcmp(&gdt1, &gdt2, sizeof(gdt1)))
1267 + printf("[FAIL]\tAll the results of SGDT should be the same.\n");
1268 + else
1269 + printf("[PASS]\tAll the results from SGDT are identical.\n");
1270 +
1271 + if (memcmp(&idt1, &idt2, sizeof(idt1)))
1272 + printf("[FAIL]\tAll the results of SIDT should be the same.\n");
1273 + else
1274 + printf("[PASS]\tAll the results from SIDT are identical.\n");
1275 +
1276 + sethandler(SIGILL, sighandler, 0);
1277 + do_test(vm86, vmcode_umip_str - vmcode, VM86_SIGNAL, 0,
1278 + "STR instruction");
1279 + clearhandler(SIGILL);
1280 +
1281 + sethandler(SIGILL, sighandler, 0);
1282 + do_test(vm86, vmcode_umip_sldt - vmcode, VM86_SIGNAL, 0,
1283 + "SLDT instruction");
1284 + clearhandler(SIGILL);
1285 +}
1286 +
1287 int main(void)
1288 {
1289 struct vm86plus_struct v86;
1290 @@ -180,6 +268,9 @@ int main(void)
1291 v86.regs.ds = load_addr / 16;
1292 v86.regs.es = load_addr / 16;
1293
1294 + /* Use the end of the page as our stack. */
1295 + v86.regs.esp = 4096;
1296 +
1297 assert((v86.regs.cs & 3) == 0); /* Looks like RPL = 0 */
1298
1299 /* #BR -- should deliver SIG??? */
1300 @@ -211,6 +302,23 @@ int main(void)
1301 v86.regs.eflags &= ~X86_EFLAGS_IF;
1302 do_test(&v86, vmcode_sti - vmcode, VM86_STI, 0, "STI with VIP set");
1303
1304 + /* POPF with VIP set but IF clear: should not trap */
1305 + v86.regs.eflags = X86_EFLAGS_VIP;
1306 + v86.regs.eax = 0;
1307 + do_test(&v86, vmcode_popf_hlt - vmcode, VM86_UNKNOWN, 0, "POPF with VIP set and IF clear");
1308 +
1309 + /* POPF with VIP set and IF set: should trap */
1310 + v86.regs.eflags = X86_EFLAGS_VIP;
1311 + v86.regs.eax = X86_EFLAGS_IF;
1312 + do_test(&v86, vmcode_popf_hlt - vmcode, VM86_STI, 0, "POPF with VIP and IF set");
1313 +
1314 + /* POPF with VIP clear and IF set: should not trap */
1315 + v86.regs.eflags = 0;
1316 + v86.regs.eax = X86_EFLAGS_IF;
1317 + do_test(&v86, vmcode_popf_hlt - vmcode, VM86_UNKNOWN, 0, "POPF with VIP clear and IF set");
1318 +
1319 + v86.regs.eflags = 0;
1320 +
1321 /* INT3 -- should cause #BP */
1322 do_test(&v86, vmcode_int3 - vmcode, VM86_TRAP, 3, "INT3");
1323
1324 @@ -218,6 +326,9 @@ int main(void)
1325 v86.regs.eax = (unsigned int)-1;
1326 do_test(&v86, vmcode_int80 - vmcode, VM86_INTx, 0x80, "int80");
1327
1328 + /* UMIP -- should exit with INTx 0x80 unless UMIP was not disabled */
1329 + do_umip_tests(&v86, addr);
1330 +
1331 /* Execute a null pointer */
1332 v86.regs.cs = 0;
1333 v86.regs.ss = 0;
1334 @@ -231,7 +342,7 @@ int main(void)
1335 clearhandler(SIGSEGV);
1336
1337 /* Make sure nothing explodes if we fork. */
1338 - if (fork() > 0)
1339 + if (fork() == 0)
1340 return 0;
1341
1342 return (nerrs == 0 ? 0 : 1);
1343 diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
1344 index 8e89d63005c7..49a7d8c75937 100644
1345 --- a/virt/kvm/arm/arch_timer.c
1346 +++ b/virt/kvm/arm/arch_timer.c
1347 @@ -602,7 +602,7 @@ int kvm_timer_hyp_init(void)
1348 return err;
1349 }
1350
1351 - kvm_info("virtual timer IRQ%d\n", host_vtimer_irq);
1352 + kvm_debug("virtual timer IRQ%d\n", host_vtimer_irq);
1353
1354 cpuhp_setup_state(CPUHP_AP_KVM_ARM_TIMER_STARTING,
1355 "kvm/arm/timer:starting", kvm_timer_starting_cpu,
1356 diff --git a/virt/kvm/arm/hyp/vgic-v3-sr.c b/virt/kvm/arm/hyp/vgic-v3-sr.c
1357 index 91728faa13fd..f2d1d4e8ae59 100644
1358 --- a/virt/kvm/arm/hyp/vgic-v3-sr.c
1359 +++ b/virt/kvm/arm/hyp/vgic-v3-sr.c
1360 @@ -215,7 +215,8 @@ void __hyp_text __vgic_v3_save_state(struct kvm_vcpu *vcpu)
1361 * are now visible to the system register interface.
1362 */
1363 if (!cpu_if->vgic_sre) {
1364 - dsb(st);
1365 + dsb(sy);
1366 + isb();
1367 cpu_if->vgic_vmcr = read_gicreg(ICH_VMCR_EL2);
1368 }
1369
1370 diff --git a/virt/kvm/arm/mmu.c b/virt/kvm/arm/mmu.c
1371 index 9dea96380339..b69798a7880e 100644
1372 --- a/virt/kvm/arm/mmu.c
1373 +++ b/virt/kvm/arm/mmu.c
1374 @@ -1760,9 +1760,9 @@ int kvm_mmu_init(void)
1375 */
1376 BUG_ON((hyp_idmap_start ^ (hyp_idmap_end - 1)) & PAGE_MASK);
1377
1378 - kvm_info("IDMAP page: %lx\n", hyp_idmap_start);
1379 - kvm_info("HYP VA range: %lx:%lx\n",
1380 - kern_hyp_va(PAGE_OFFSET), kern_hyp_va(~0UL));
1381 + kvm_debug("IDMAP page: %lx\n", hyp_idmap_start);
1382 + kvm_debug("HYP VA range: %lx:%lx\n",
1383 + kern_hyp_va(PAGE_OFFSET), kern_hyp_va(~0UL));
1384
1385 if (hyp_idmap_start >= kern_hyp_va(PAGE_OFFSET) &&
1386 hyp_idmap_start < kern_hyp_va(~0UL) &&
1387 diff --git a/virt/kvm/arm/vgic/vgic-v2.c b/virt/kvm/arm/vgic/vgic-v2.c
1388 index e4187e52bb26..841d4b27555a 100644
1389 --- a/virt/kvm/arm/vgic/vgic-v2.c
1390 +++ b/virt/kvm/arm/vgic/vgic-v2.c
1391 @@ -37,6 +37,13 @@ void vgic_v2_init_lrs(void)
1392 vgic_v2_write_lr(i, 0);
1393 }
1394
1395 +void vgic_v2_set_npie(struct kvm_vcpu *vcpu)
1396 +{
1397 + struct vgic_v2_cpu_if *cpuif = &vcpu->arch.vgic_cpu.vgic_v2;
1398 +
1399 + cpuif->vgic_hcr |= GICH_HCR_NPIE;
1400 +}
1401 +
1402 void vgic_v2_set_underflow(struct kvm_vcpu *vcpu)
1403 {
1404 struct vgic_v2_cpu_if *cpuif = &vcpu->arch.vgic_cpu.vgic_v2;
1405 @@ -63,7 +70,7 @@ void vgic_v2_fold_lr_state(struct kvm_vcpu *vcpu)
1406 struct vgic_v2_cpu_if *cpuif = &vgic_cpu->vgic_v2;
1407 int lr;
1408
1409 - cpuif->vgic_hcr &= ~GICH_HCR_UIE;
1410 + cpuif->vgic_hcr &= ~(GICH_HCR_UIE | GICH_HCR_NPIE);
1411
1412 for (lr = 0; lr < vgic_cpu->used_lrs; lr++) {
1413 u32 val = cpuif->vgic_lr[lr];
1414 @@ -380,7 +387,7 @@ int vgic_v2_probe(const struct gic_kvm_info *info)
1415 kvm_vgic_global_state.type = VGIC_V2;
1416 kvm_vgic_global_state.max_gic_vcpus = VGIC_V2_MAX_CPUS;
1417
1418 - kvm_info("vgic-v2@%llx\n", info->vctrl.start);
1419 + kvm_debug("vgic-v2@%llx\n", info->vctrl.start);
1420
1421 return 0;
1422 out:
1423 diff --git a/virt/kvm/arm/vgic/vgic-v3.c b/virt/kvm/arm/vgic/vgic-v3.c
1424 index 502f2100e7bf..9dcc31600a8b 100644
1425 --- a/virt/kvm/arm/vgic/vgic-v3.c
1426 +++ b/virt/kvm/arm/vgic/vgic-v3.c
1427 @@ -25,6 +25,13 @@ static bool group0_trap;
1428 static bool group1_trap;
1429 static bool common_trap;
1430
1431 +void vgic_v3_set_npie(struct kvm_vcpu *vcpu)
1432 +{
1433 + struct vgic_v3_cpu_if *cpuif = &vcpu->arch.vgic_cpu.vgic_v3;
1434 +
1435 + cpuif->vgic_hcr |= ICH_HCR_NPIE;
1436 +}
1437 +
1438 void vgic_v3_set_underflow(struct kvm_vcpu *vcpu)
1439 {
1440 struct vgic_v3_cpu_if *cpuif = &vcpu->arch.vgic_cpu.vgic_v3;
1441 @@ -45,7 +52,7 @@ void vgic_v3_fold_lr_state(struct kvm_vcpu *vcpu)
1442 u32 model = vcpu->kvm->arch.vgic.vgic_model;
1443 int lr;
1444
1445 - cpuif->vgic_hcr &= ~ICH_HCR_UIE;
1446 + cpuif->vgic_hcr &= ~(ICH_HCR_UIE | ICH_HCR_NPIE);
1447
1448 for (lr = 0; lr < vgic_cpu->used_lrs; lr++) {
1449 u64 val = cpuif->vgic_lr[lr];
1450 diff --git a/virt/kvm/arm/vgic/vgic.c b/virt/kvm/arm/vgic/vgic.c
1451 index da53c6e7d688..c9a8e7b7c300 100644
1452 --- a/virt/kvm/arm/vgic/vgic.c
1453 +++ b/virt/kvm/arm/vgic/vgic.c
1454 @@ -610,22 +610,37 @@ static inline void vgic_set_underflow(struct kvm_vcpu *vcpu)
1455 vgic_v3_set_underflow(vcpu);
1456 }
1457
1458 +static inline void vgic_set_npie(struct kvm_vcpu *vcpu)
1459 +{
1460 + if (kvm_vgic_global_state.type == VGIC_V2)
1461 + vgic_v2_set_npie(vcpu);
1462 + else
1463 + vgic_v3_set_npie(vcpu);
1464 +}
1465 +
1466 /* Requires the ap_list_lock to be held. */
1467 -static int compute_ap_list_depth(struct kvm_vcpu *vcpu)
1468 +static int compute_ap_list_depth(struct kvm_vcpu *vcpu,
1469 + bool *multi_sgi)
1470 {
1471 struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
1472 struct vgic_irq *irq;
1473 int count = 0;
1474
1475 + *multi_sgi = false;
1476 +
1477 DEBUG_SPINLOCK_BUG_ON(!spin_is_locked(&vgic_cpu->ap_list_lock));
1478
1479 list_for_each_entry(irq, &vgic_cpu->ap_list_head, ap_list) {
1480 spin_lock(&irq->irq_lock);
1481 /* GICv2 SGIs can count for more than one... */
1482 - if (vgic_irq_is_sgi(irq->intid) && irq->source)
1483 - count += hweight8(irq->source);
1484 - else
1485 + if (vgic_irq_is_sgi(irq->intid) && irq->source) {
1486 + int w = hweight8(irq->source);
1487 +
1488 + count += w;
1489 + *multi_sgi |= (w > 1);
1490 + } else {
1491 count++;
1492 + }
1493 spin_unlock(&irq->irq_lock);
1494 }
1495 return count;
1496 @@ -636,28 +651,43 @@ static void vgic_flush_lr_state(struct kvm_vcpu *vcpu)
1497 {
1498 struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu;
1499 struct vgic_irq *irq;
1500 - int count = 0;
1501 + int count;
1502 + bool npie = false;
1503 + bool multi_sgi;
1504 + u8 prio = 0xff;
1505
1506 DEBUG_SPINLOCK_BUG_ON(!spin_is_locked(&vgic_cpu->ap_list_lock));
1507
1508 - if (compute_ap_list_depth(vcpu) > kvm_vgic_global_state.nr_lr)
1509 + count = compute_ap_list_depth(vcpu, &multi_sgi);
1510 + if (count > kvm_vgic_global_state.nr_lr || multi_sgi)
1511 vgic_sort_ap_list(vcpu);
1512
1513 + count = 0;
1514 +
1515 list_for_each_entry(irq, &vgic_cpu->ap_list_head, ap_list) {
1516 spin_lock(&irq->irq_lock);
1517
1518 - if (unlikely(vgic_target_oracle(irq) != vcpu))
1519 - goto next;
1520 -
1521 /*
1522 - * If we get an SGI with multiple sources, try to get
1523 - * them in all at once.
1524 + * If we have multi-SGIs in the pipeline, we need to
1525 + * guarantee that they are all seen before any IRQ of
1526 + * lower priority. In that case, we need to filter out
1527 + * these interrupts by exiting early. This is easy as
1528 + * the AP list has been sorted already.
1529 */
1530 - do {
1531 + if (multi_sgi && irq->priority > prio) {
1532 + spin_unlock(&irq->irq_lock);
1533 + break;
1534 + }
1535 +
1536 + if (likely(vgic_target_oracle(irq) == vcpu)) {
1537 vgic_populate_lr(vcpu, irq, count++);
1538 - } while (irq->source && count < kvm_vgic_global_state.nr_lr);
1539
1540 -next:
1541 + if (irq->source) {
1542 + npie = true;
1543 + prio = irq->priority;
1544 + }
1545 + }
1546 +
1547 spin_unlock(&irq->irq_lock);
1548
1549 if (count == kvm_vgic_global_state.nr_lr) {
1550 @@ -668,6 +698,9 @@ static void vgic_flush_lr_state(struct kvm_vcpu *vcpu)
1551 }
1552 }
1553
1554 + if (npie)
1555 + vgic_set_npie(vcpu);
1556 +
1557 vcpu->arch.vgic_cpu.used_lrs = count;
1558
1559 /* Nuke remaining LRs */
1560 diff --git a/virt/kvm/arm/vgic/vgic.h b/virt/kvm/arm/vgic/vgic.h
1561 index bf9ceab67c77..f7450dc41ab3 100644
1562 --- a/virt/kvm/arm/vgic/vgic.h
1563 +++ b/virt/kvm/arm/vgic/vgic.h
1564 @@ -150,6 +150,7 @@ void vgic_v2_fold_lr_state(struct kvm_vcpu *vcpu);
1565 void vgic_v2_populate_lr(struct kvm_vcpu *vcpu, struct vgic_irq *irq, int lr);
1566 void vgic_v2_clear_lr(struct kvm_vcpu *vcpu, int lr);
1567 void vgic_v2_set_underflow(struct kvm_vcpu *vcpu);
1568 +void vgic_v2_set_npie(struct kvm_vcpu *vcpu);
1569 int vgic_v2_has_attr_regs(struct kvm_device *dev, struct kvm_device_attr *attr);
1570 int vgic_v2_dist_uaccess(struct kvm_vcpu *vcpu, bool is_write,
1571 int offset, u32 *val);
1572 @@ -179,6 +180,7 @@ void vgic_v3_fold_lr_state(struct kvm_vcpu *vcpu);
1573 void vgic_v3_populate_lr(struct kvm_vcpu *vcpu, struct vgic_irq *irq, int lr);
1574 void vgic_v3_clear_lr(struct kvm_vcpu *vcpu, int lr);
1575 void vgic_v3_set_underflow(struct kvm_vcpu *vcpu);
1576 +void vgic_v3_set_npie(struct kvm_vcpu *vcpu);
1577 void vgic_v3_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr);
1578 void vgic_v3_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr);
1579 void vgic_v3_enable(struct kvm_vcpu *vcpu);