This is the 5.4.131 stable release

-----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEEZH8oZUiU471FcZm+ONu9yGCSaT4FAmDqzWoACgkQONu9yGCS
 aT69chAAtGM2bBAvhHucksNsV3PAmxhrFWQk/JafeGmlHzozGEF6kS2/LkEvddWm
 R2NHBLPDvqYuSbGxxrBp8kMZx6AWaGdOehfTdzPc3t+tAdLlTRBtZ7sXNVEjH6ES
 gBtET0E7hZ+5Hc8iBhO2gk2HDdyau5r+eBu2tH99oNVA0tiq4wta3zeNNxtIFZrk
 JX1G2nLsDXD+fjqwIlNHpKAu5uH6zhGzjg80JCMuFOv+UElHQ7OuXP1l5eu/geiq
 +vu982A2s4yI8cydndv/0JtsG3Jd0eBw2RkXmZiVOPHViHzKvMa9gSSSdjdjF+mp
 e+JjH2o5dSeM9D8XusollyCfnJ819ceANCS2nRgpNc5XMl/Oy7+Jz+W+rWi6mGpX
 MTV74qRg/WALb9kQJn6Xwh6qJUQA01kU5PCTNheAnZHKlbtkR25wjXYd5AAMPu/b
 KzFc8qHAH/2oIAzmhnl7hWgtLUvG4XmtVp8ayRYQBg96WdIdoFzQ3t8MPbHO8QLT
 gb5RsGSdIvFK6/B+peoijLUMQLRCmZAQg2+eybZBx6DsYopI5d6ACrPLKq3zPxrq
 PUCQbcvOlCj5wZ2KCwzcDUz6vS5mBmKg8nzLllnTNqfWxnJ+9SqrlXRbdU7kcX+w
 84Y1ihwLZ7hEs0jPaEJxgadzWJij9bytzfJqXMBKAe7/fdm4AtQ=
 =zyOd
 -----END PGP SIGNATURE-----

Merge 5.4.131 into android11-5.4-lts

Changes in 5.4.131
	KVM: SVM: Periodically schedule when unregistering regions on destroy
	s390/stack: fix possible register corruption with stack switch helper
	KVM: SVM: Call SEV Guest Decommission if ASID binding fails
	xen/events: reset active flag for lateeoi events later
	Linux 5.4.131

Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
Change-Id: I94f0b2bb276738d76c48d53d81baade91921a629
This commit is contained in:
Greg Kroah-Hartman 2021-07-11 21:36:19 +02:00
commit dd07a63f96
4 changed files with 53 additions and 23 deletions

View file

@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 4
SUBLEVEL = 130
SUBLEVEL = 131
EXTRAVERSION =
NAME = Kleptomaniac Octopus

View file

@ -79,12 +79,16 @@ struct stack_frame {
CALL_ARGS_4(arg1, arg2, arg3, arg4); \
register unsigned long r4 asm("6") = (unsigned long)(arg5)
#define CALL_FMT_0 "=&d" (r2) :
#define CALL_FMT_1 "+&d" (r2) :
#define CALL_FMT_2 CALL_FMT_1 "d" (r3),
#define CALL_FMT_3 CALL_FMT_2 "d" (r4),
#define CALL_FMT_4 CALL_FMT_3 "d" (r5),
#define CALL_FMT_5 CALL_FMT_4 "d" (r6),
/*
* To keep this simple mark register 2-6 as being changed (volatile)
* by the called function, even though register 6 is saved/nonvolatile.
*/
#define CALL_FMT_0 "=&d" (r2)
#define CALL_FMT_1 "+&d" (r2)
#define CALL_FMT_2 CALL_FMT_1, "+&d" (r3)
#define CALL_FMT_3 CALL_FMT_2, "+&d" (r4)
#define CALL_FMT_4 CALL_FMT_3, "+&d" (r5)
#define CALL_FMT_5 CALL_FMT_4, "+&d" (r6)
#define CALL_CLOBBER_5 "0", "1", "14", "cc", "memory"
#define CALL_CLOBBER_4 CALL_CLOBBER_5
@ -105,7 +109,7 @@ struct stack_frame {
" brasl 14,%[_fn]\n" \
" la 15,0(%[_prev])\n" \
: [_prev] "=&a" (prev), CALL_FMT_##nr \
[_stack] "a" (stack), \
: [_stack] "a" (stack), \
[_bc] "i" (offsetof(struct stack_frame, back_chain)), \
[_fn] "X" (fn) : CALL_CLOBBER_##nr); \
r2; \

View file

@ -1794,9 +1794,25 @@ static void sev_asid_free(struct kvm *kvm)
__sev_asid_free(sev->asid);
}
static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)
static void sev_decommission(unsigned int handle)
{
struct sev_data_decommission *decommission;
if (!handle)
return;
decommission = kzalloc(sizeof(*decommission), GFP_KERNEL);
if (!decommission)
return;
decommission->handle = handle;
sev_guest_decommission(decommission, NULL);
kfree(decommission);
}
static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)
{
struct sev_data_deactivate *data;
if (!handle)
@ -1814,15 +1830,7 @@ static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)
sev_guest_df_flush(NULL);
kfree(data);
decommission = kzalloc(sizeof(*decommission), GFP_KERNEL);
if (!decommission)
return;
/* decommission handle */
decommission->handle = handle;
sev_guest_decommission(decommission, NULL);
kfree(decommission);
sev_decommission(handle);
}
static struct page **sev_pin_memory(struct kvm *kvm, unsigned long uaddr,
@ -1960,6 +1968,7 @@ static void sev_vm_destroy(struct kvm *kvm)
list_for_each_safe(pos, q, head) {
__unregister_enc_region_locked(kvm,
list_entry(pos, struct enc_region, list));
cond_resched();
}
}
@ -6475,8 +6484,10 @@ static int sev_launch_start(struct kvm *kvm, struct kvm_sev_cmd *argp)
/* Bind ASID to this guest */
ret = sev_bind_asid(kvm, start->handle, error);
if (ret)
if (ret) {
sev_decommission(start->handle);
goto e_free_session;
}
/* return handle to userspace */
params.handle = start->handle;

View file

@ -525,6 +525,9 @@ static void xen_irq_lateeoi_locked(struct irq_info *info, bool spurious)
}
info->eoi_time = 0;
/* is_active hasn't been reset yet, do it now. */
smp_store_release(&info->is_active, 0);
do_unmask(info, EVT_MASK_REASON_EOI_PENDING);
}
@ -1781,10 +1784,22 @@ static void lateeoi_ack_dynirq(struct irq_data *data)
struct irq_info *info = info_for_irq(data->irq);
evtchn_port_t evtchn = info ? info->evtchn : 0;
if (VALID_EVTCHN(evtchn)) {
do_mask(info, EVT_MASK_REASON_EOI_PENDING);
ack_dynirq(data);
}
if (!VALID_EVTCHN(evtchn))
return;
do_mask(info, EVT_MASK_REASON_EOI_PENDING);
if (unlikely(irqd_is_setaffinity_pending(data)) &&
likely(!irqd_irq_disabled(data))) {
do_mask(info, EVT_MASK_REASON_TEMPORARY);
clear_evtchn(evtchn);
irq_move_masked_irq(data);
do_unmask(info, EVT_MASK_REASON_TEMPORARY);
} else
clear_evtchn(evtchn);
}
static void lateeoi_mask_ack_dynirq(struct irq_data *data)