mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-06 20:03:33 -04:00
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:
commit
dd07a63f96
4 changed files with 53 additions and 23 deletions
2
Makefile
2
Makefile
|
|
@ -1,7 +1,7 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 130
|
||||
SUBLEVEL = 131
|
||||
EXTRAVERSION =
|
||||
NAME = Kleptomaniac Octopus
|
||||
|
||||
|
|
|
|||
|
|
@ -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; \
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue