Magellan Linux

Contents of /trunk/kernel-alx/patches-5.4/0230-5.4.131-all-fixes.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3635 - (show annotations) (download)
Mon Oct 24 12:34:12 2022 UTC (19 months ago) by niro
File size: 4656 byte(s)
-sync kernel patches
1 diff --git a/Makefile b/Makefile
2 index 4256dd594d18c..5e8716dbbadca 100644
3 --- a/Makefile
4 +++ b/Makefile
5 @@ -1,7 +1,7 @@
6 # SPDX-License-Identifier: GPL-2.0
7 VERSION = 5
8 PATCHLEVEL = 4
9 -SUBLEVEL = 130
10 +SUBLEVEL = 131
11 EXTRAVERSION =
12 NAME = Kleptomaniac Octopus
13
14 diff --git a/arch/s390/include/asm/stacktrace.h b/arch/s390/include/asm/stacktrace.h
15 index 3679d224fd3c5..6836532f8d1a6 100644
16 --- a/arch/s390/include/asm/stacktrace.h
17 +++ b/arch/s390/include/asm/stacktrace.h
18 @@ -79,12 +79,16 @@ struct stack_frame {
19 CALL_ARGS_4(arg1, arg2, arg3, arg4); \
20 register unsigned long r4 asm("6") = (unsigned long)(arg5)
21
22 -#define CALL_FMT_0 "=&d" (r2) :
23 -#define CALL_FMT_1 "+&d" (r2) :
24 -#define CALL_FMT_2 CALL_FMT_1 "d" (r3),
25 -#define CALL_FMT_3 CALL_FMT_2 "d" (r4),
26 -#define CALL_FMT_4 CALL_FMT_3 "d" (r5),
27 -#define CALL_FMT_5 CALL_FMT_4 "d" (r6),
28 +/*
29 + * To keep this simple mark register 2-6 as being changed (volatile)
30 + * by the called function, even though register 6 is saved/nonvolatile.
31 + */
32 +#define CALL_FMT_0 "=&d" (r2)
33 +#define CALL_FMT_1 "+&d" (r2)
34 +#define CALL_FMT_2 CALL_FMT_1, "+&d" (r3)
35 +#define CALL_FMT_3 CALL_FMT_2, "+&d" (r4)
36 +#define CALL_FMT_4 CALL_FMT_3, "+&d" (r5)
37 +#define CALL_FMT_5 CALL_FMT_4, "+&d" (r6)
38
39 #define CALL_CLOBBER_5 "0", "1", "14", "cc", "memory"
40 #define CALL_CLOBBER_4 CALL_CLOBBER_5
41 @@ -105,7 +109,7 @@ struct stack_frame {
42 " brasl 14,%[_fn]\n" \
43 " la 15,0(%[_prev])\n" \
44 : [_prev] "=&a" (prev), CALL_FMT_##nr \
45 - [_stack] "a" (stack), \
46 + : [_stack] "a" (stack), \
47 [_bc] "i" (offsetof(struct stack_frame, back_chain)), \
48 [_fn] "X" (fn) : CALL_CLOBBER_##nr); \
49 r2; \
50 diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
51 index 074cd170912aa..7341d22ed04f1 100644
52 --- a/arch/x86/kvm/svm.c
53 +++ b/arch/x86/kvm/svm.c
54 @@ -1794,9 +1794,25 @@ static void sev_asid_free(struct kvm *kvm)
55 __sev_asid_free(sev->asid);
56 }
57
58 -static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)
59 +static void sev_decommission(unsigned int handle)
60 {
61 struct sev_data_decommission *decommission;
62 +
63 + if (!handle)
64 + return;
65 +
66 + decommission = kzalloc(sizeof(*decommission), GFP_KERNEL);
67 + if (!decommission)
68 + return;
69 +
70 + decommission->handle = handle;
71 + sev_guest_decommission(decommission, NULL);
72 +
73 + kfree(decommission);
74 +}
75 +
76 +static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)
77 +{
78 struct sev_data_deactivate *data;
79
80 if (!handle)
81 @@ -1814,15 +1830,7 @@ static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)
82 sev_guest_df_flush(NULL);
83 kfree(data);
84
85 - decommission = kzalloc(sizeof(*decommission), GFP_KERNEL);
86 - if (!decommission)
87 - return;
88 -
89 - /* decommission handle */
90 - decommission->handle = handle;
91 - sev_guest_decommission(decommission, NULL);
92 -
93 - kfree(decommission);
94 + sev_decommission(handle);
95 }
96
97 static struct page **sev_pin_memory(struct kvm *kvm, unsigned long uaddr,
98 @@ -1960,6 +1968,7 @@ static void sev_vm_destroy(struct kvm *kvm)
99 list_for_each_safe(pos, q, head) {
100 __unregister_enc_region_locked(kvm,
101 list_entry(pos, struct enc_region, list));
102 + cond_resched();
103 }
104 }
105
106 @@ -6475,8 +6484,10 @@ static int sev_launch_start(struct kvm *kvm, struct kvm_sev_cmd *argp)
107
108 /* Bind ASID to this guest */
109 ret = sev_bind_asid(kvm, start->handle, error);
110 - if (ret)
111 + if (ret) {
112 + sev_decommission(start->handle);
113 goto e_free_session;
114 + }
115
116 /* return handle to userspace */
117 params.handle = start->handle;
118 diff --git a/drivers/xen/events/events_base.c b/drivers/xen/events/events_base.c
119 index 9cc77f0397797..de825df4abf6a 100644
120 --- a/drivers/xen/events/events_base.c
121 +++ b/drivers/xen/events/events_base.c
122 @@ -525,6 +525,9 @@ static void xen_irq_lateeoi_locked(struct irq_info *info, bool spurious)
123 }
124
125 info->eoi_time = 0;
126 +
127 + /* is_active hasn't been reset yet, do it now. */
128 + smp_store_release(&info->is_active, 0);
129 do_unmask(info, EVT_MASK_REASON_EOI_PENDING);
130 }
131
132 @@ -1781,10 +1784,22 @@ static void lateeoi_ack_dynirq(struct irq_data *data)
133 struct irq_info *info = info_for_irq(data->irq);
134 evtchn_port_t evtchn = info ? info->evtchn : 0;
135
136 - if (VALID_EVTCHN(evtchn)) {
137 - do_mask(info, EVT_MASK_REASON_EOI_PENDING);
138 - ack_dynirq(data);
139 - }
140 + if (!VALID_EVTCHN(evtchn))
141 + return;
142 +
143 + do_mask(info, EVT_MASK_REASON_EOI_PENDING);
144 +
145 + if (unlikely(irqd_is_setaffinity_pending(data)) &&
146 + likely(!irqd_irq_disabled(data))) {
147 + do_mask(info, EVT_MASK_REASON_TEMPORARY);
148 +
149 + clear_evtchn(evtchn);
150 +
151 + irq_move_masked_irq(data);
152 +
153 + do_unmask(info, EVT_MASK_REASON_TEMPORARY);
154 + } else
155 + clear_evtchn(evtchn);
156 }
157
158 static void lateeoi_mask_ack_dynirq(struct irq_data *data)