mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-01 10:42:11 +00:00
- Fix couple of late pt_regs flags handling findings of conversion to
generic entry. - Fix potential register clobbering in stack switch helper. - Fix thread/group masks for offline cpus. - Fix cleanup of mdev resources when remove callback is invoked in vfio-ap code. -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEE3QHqV+H2a8xAv27vjYWKoQLXFBgFAmDXFfYACgkQjYWKoQLX FBjWmwf/X9JNauWHyr2lrWKiP8QF6jviRHT3aysQKAn6For0qpFEFVLdAaHGTfhw 3C+s/CHz4AJFQEsOyBIHx8hlBlaQJm4o+6Aaem7yAaDo/B65KkN9bTi5BcYIu5Bo WZruSgoNbN8effm5dnahqsopXSSLXPf2CuaVoqwW15FUM7b/tu4ljpt5meHbtBnX VC8iaKI90ZRmARUvwSaR29zj4y56vlzG8ebmTZA2C5ZdleNnie/DeXvePXkP4FL4 QVHGK4RjAnTe32YlwNJMbFPqOuumdQEPlVFT1mP+YLmBRaaOSdy9ky+CnfPLw8dp pIasRLu+hex1xpyvao2d5tinCT73xw== =M4Hh -----END PGP SIGNATURE----- Merge tag 's390-5.13-5' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux Pull s390 fixes from Vasily Gorbik: - Fix a couple of late pt_regs flags handling findings of conversion to generic entry. - Fix potential register clobbering in stack switch helper. - Fix thread/group masks for offline cpus. - Fix cleanup of mdev resources when remove callback is invoked in vfio-ap code. * tag 's390-5.13-5' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/stack: fix possible register corruption with stack switch helper s390/topology: clear thread/group maps for offline cpus s390/vfio-ap: clean up mdev resources when remove callback invoked s390: clear pt_regs::flags on irq entry s390: fix system call restart with multiple signals
This commit is contained in:
commit
625acffd7a
@ -91,12 +91,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
|
||||
@ -118,7 +122,7 @@ struct stack_frame {
|
||||
" brasl 14,%[_fn]\n" \
|
||||
" la 15,0(%[_prev])\n" \
|
||||
: [_prev] "=&a" (prev), CALL_FMT_##nr \
|
||||
[_stack] "R" (stack), \
|
||||
: [_stack] "R" (stack), \
|
||||
[_bc] "i" (offsetof(struct stack_frame, back_chain)), \
|
||||
[_frame] "d" (frame), \
|
||||
[_fn] "X" (fn) : CALL_CLOBBER_##nr); \
|
||||
|
@ -418,6 +418,7 @@ ENTRY(\name)
|
||||
xgr %r6,%r6
|
||||
xgr %r7,%r7
|
||||
xgr %r10,%r10
|
||||
xc __PT_FLAGS(8,%r11),__PT_FLAGS(%r11)
|
||||
mvc __PT_R8(64,%r11),__LC_SAVE_AREA_ASYNC
|
||||
stmg %r8,%r9,__PT_PSW(%r11)
|
||||
tm %r8,0x0001 # coming from user space?
|
||||
|
@ -512,7 +512,6 @@ void arch_do_signal_or_restart(struct pt_regs *regs, bool has_signal)
|
||||
|
||||
/* No handlers present - check for system call restart */
|
||||
clear_pt_regs_flag(regs, PIF_SYSCALL);
|
||||
clear_pt_regs_flag(regs, PIF_SYSCALL_RESTART);
|
||||
if (current->thread.system_call) {
|
||||
regs->int_code = current->thread.system_call;
|
||||
switch (regs->gprs[2]) {
|
||||
|
@ -66,7 +66,10 @@ static void cpu_group_map(cpumask_t *dst, struct mask_info *info, unsigned int c
|
||||
{
|
||||
static cpumask_t mask;
|
||||
|
||||
cpumask_copy(&mask, cpumask_of(cpu));
|
||||
cpumask_clear(&mask);
|
||||
if (!cpu_online(cpu))
|
||||
goto out;
|
||||
cpumask_set_cpu(cpu, &mask);
|
||||
switch (topology_mode) {
|
||||
case TOPOLOGY_MODE_HW:
|
||||
while (info) {
|
||||
@ -83,10 +86,10 @@ static void cpu_group_map(cpumask_t *dst, struct mask_info *info, unsigned int c
|
||||
default:
|
||||
fallthrough;
|
||||
case TOPOLOGY_MODE_SINGLE:
|
||||
cpumask_copy(&mask, cpumask_of(cpu));
|
||||
break;
|
||||
}
|
||||
cpumask_and(&mask, &mask, cpu_online_mask);
|
||||
out:
|
||||
cpumask_copy(dst, &mask);
|
||||
}
|
||||
|
||||
@ -95,7 +98,10 @@ static void cpu_thread_map(cpumask_t *dst, unsigned int cpu)
|
||||
static cpumask_t mask;
|
||||
int i;
|
||||
|
||||
cpumask_copy(&mask, cpumask_of(cpu));
|
||||
cpumask_clear(&mask);
|
||||
if (!cpu_online(cpu))
|
||||
goto out;
|
||||
cpumask_set_cpu(cpu, &mask);
|
||||
if (topology_mode != TOPOLOGY_MODE_HW)
|
||||
goto out;
|
||||
cpu -= cpu % (smp_cpu_mtid + 1);
|
||||
|
@ -366,16 +366,6 @@ static int vfio_ap_mdev_remove(struct mdev_device *mdev)
|
||||
struct ap_matrix_mdev *matrix_mdev = mdev_get_drvdata(mdev);
|
||||
|
||||
mutex_lock(&matrix_dev->lock);
|
||||
|
||||
/*
|
||||
* If the KVM pointer is in flux or the guest is running, disallow
|
||||
* un-assignment of control domain.
|
||||
*/
|
||||
if (matrix_mdev->kvm_busy || matrix_mdev->kvm) {
|
||||
mutex_unlock(&matrix_dev->lock);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
vfio_ap_mdev_reset_queues(mdev);
|
||||
list_del(&matrix_mdev->node);
|
||||
kfree(matrix_mdev);
|
||||
|
Loading…
Reference in New Issue
Block a user