Skip to content

Commit 136d4a8

Browse files
committed
Merge tag 'v5.4.131' of git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable into odroid-5.4.y
This is the 5.4.131 stable release Change-Id: I52da2b6d8e086a98f531ae68f738fd542127acb6
2 parents 87e8885 + e8d9b74 commit 136d4a8

4 files changed

Lines changed: 53 additions & 23 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
VERSION = 5
33
PATCHLEVEL = 4
4-
SUBLEVEL = 130
4+
SUBLEVEL = 131
55
EXTRAVERSION =
66
NAME = Kleptomaniac Octopus
77

arch/s390/include/asm/stacktrace.h

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,16 @@ struct stack_frame {
7979
CALL_ARGS_4(arg1, arg2, arg3, arg4); \
8080
register unsigned long r4 asm("6") = (unsigned long)(arg5)
8181

82-
#define CALL_FMT_0 "=&d" (r2) :
83-
#define CALL_FMT_1 "+&d" (r2) :
84-
#define CALL_FMT_2 CALL_FMT_1 "d" (r3),
85-
#define CALL_FMT_3 CALL_FMT_2 "d" (r4),
86-
#define CALL_FMT_4 CALL_FMT_3 "d" (r5),
87-
#define CALL_FMT_5 CALL_FMT_4 "d" (r6),
82+
/*
83+
* To keep this simple mark register 2-6 as being changed (volatile)
84+
* by the called function, even though register 6 is saved/nonvolatile.
85+
*/
86+
#define CALL_FMT_0 "=&d" (r2)
87+
#define CALL_FMT_1 "+&d" (r2)
88+
#define CALL_FMT_2 CALL_FMT_1, "+&d" (r3)
89+
#define CALL_FMT_3 CALL_FMT_2, "+&d" (r4)
90+
#define CALL_FMT_4 CALL_FMT_3, "+&d" (r5)
91+
#define CALL_FMT_5 CALL_FMT_4, "+&d" (r6)
8892

8993
#define CALL_CLOBBER_5 "0", "1", "14", "cc", "memory"
9094
#define CALL_CLOBBER_4 CALL_CLOBBER_5
@@ -105,7 +109,7 @@ struct stack_frame {
105109
" brasl 14,%[_fn]\n" \
106110
" la 15,0(%[_prev])\n" \
107111
: [_prev] "=&a" (prev), CALL_FMT_##nr \
108-
[_stack] "a" (stack), \
112+
: [_stack] "a" (stack), \
109113
[_bc] "i" (offsetof(struct stack_frame, back_chain)), \
110114
[_fn] "X" (fn) : CALL_CLOBBER_##nr); \
111115
r2; \

arch/x86/kvm/svm.c

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1794,9 +1794,25 @@ static void sev_asid_free(struct kvm *kvm)
17941794
__sev_asid_free(sev->asid);
17951795
}
17961796

1797-
static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)
1797+
static void sev_decommission(unsigned int handle)
17981798
{
17991799
struct sev_data_decommission *decommission;
1800+
1801+
if (!handle)
1802+
return;
1803+
1804+
decommission = kzalloc(sizeof(*decommission), GFP_KERNEL);
1805+
if (!decommission)
1806+
return;
1807+
1808+
decommission->handle = handle;
1809+
sev_guest_decommission(decommission, NULL);
1810+
1811+
kfree(decommission);
1812+
}
1813+
1814+
static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)
1815+
{
18001816
struct sev_data_deactivate *data;
18011817

18021818
if (!handle)
@@ -1814,15 +1830,7 @@ static void sev_unbind_asid(struct kvm *kvm, unsigned int handle)
18141830
sev_guest_df_flush(NULL);
18151831
kfree(data);
18161832

1817-
decommission = kzalloc(sizeof(*decommission), GFP_KERNEL);
1818-
if (!decommission)
1819-
return;
1820-
1821-
/* decommission handle */
1822-
decommission->handle = handle;
1823-
sev_guest_decommission(decommission, NULL);
1824-
1825-
kfree(decommission);
1833+
sev_decommission(handle);
18261834
}
18271835

18281836
static struct page **sev_pin_memory(struct kvm *kvm, unsigned long uaddr,
@@ -1960,6 +1968,7 @@ static void sev_vm_destroy(struct kvm *kvm)
19601968
list_for_each_safe(pos, q, head) {
19611969
__unregister_enc_region_locked(kvm,
19621970
list_entry(pos, struct enc_region, list));
1971+
cond_resched();
19631972
}
19641973
}
19651974

@@ -6475,8 +6484,10 @@ static int sev_launch_start(struct kvm *kvm, struct kvm_sev_cmd *argp)
64756484

64766485
/* Bind ASID to this guest */
64776486
ret = sev_bind_asid(kvm, start->handle, error);
6478-
if (ret)
6487+
if (ret) {
6488+
sev_decommission(start->handle);
64796489
goto e_free_session;
6490+
}
64806491

64816492
/* return handle to userspace */
64826493
params.handle = start->handle;

drivers/xen/events/events_base.c

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,9 @@ static void xen_irq_lateeoi_locked(struct irq_info *info, bool spurious)
525525
}
526526

527527
info->eoi_time = 0;
528+
529+
/* is_active hasn't been reset yet, do it now. */
530+
smp_store_release(&info->is_active, 0);
528531
do_unmask(info, EVT_MASK_REASON_EOI_PENDING);
529532
}
530533

@@ -1781,10 +1784,22 @@ static void lateeoi_ack_dynirq(struct irq_data *data)
17811784
struct irq_info *info = info_for_irq(data->irq);
17821785
evtchn_port_t evtchn = info ? info->evtchn : 0;
17831786

1784-
if (VALID_EVTCHN(evtchn)) {
1785-
do_mask(info, EVT_MASK_REASON_EOI_PENDING);
1786-
ack_dynirq(data);
1787-
}
1787+
if (!VALID_EVTCHN(evtchn))
1788+
return;
1789+
1790+
do_mask(info, EVT_MASK_REASON_EOI_PENDING);
1791+
1792+
if (unlikely(irqd_is_setaffinity_pending(data)) &&
1793+
likely(!irqd_irq_disabled(data))) {
1794+
do_mask(info, EVT_MASK_REASON_TEMPORARY);
1795+
1796+
clear_evtchn(evtchn);
1797+
1798+
irq_move_masked_irq(data);
1799+
1800+
do_unmask(info, EVT_MASK_REASON_TEMPORARY);
1801+
} else
1802+
clear_evtchn(evtchn);
17881803
}
17891804

17901805
static void lateeoi_mask_ack_dynirq(struct irq_data *data)

0 commit comments

Comments
 (0)