mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-16 07:46:51 +07:00
1758feddb0
- Improve stop_machine wait logic: replace cpu_relax_yield call in generic stop_machine function with a weak stop_machine_yield function. This is overridden on s390, which yields the current cpu to the neighbouring cpu after a couple of retries, instead of blindly giving up the cpu to the hipervisor. This significantly improves stop_machine performance on s390 in overcommitted scenarios. This includes common code changes which have been Acked by Peter Zijlstra and Thomas Gleixner. - Improve jump label transformation speed: transform jump labels without using stop_machine. - Refactoring of the vfio-ccw cp handling, simplifying the code and avoiding unneeded allocating/copying. - Various vfio-ccw fixes (ccw translation, state machine). - Add support for vfio-ap queue interrupt control in the guest. This includes s390 kvm changes which have been Acked by Christian Borntraeger. - Add protected virtualization support for virtio-ccw. - Enforce both CONFIG_SMP and CONFIG_HOTPLUG_CPU, which allows to remove some code which most likely isn't working at all, besides that s390 didn't even compile for !CONFIG_SMP. - Support for special flagged EP11 CPRBs for zcrypt. - Handle PCI devices with no support for new MIO instructions. - Avoid KASAN false positives in reworked stack unwinder. - Couple of fixes for the QDIO layer. - Convert s390 specific documentation to ReST format. - Let s390 crypto modules return -ENODEV instead of -EOPNOTSUPP if hardware is missing. This way our modules behave like most other modules and which is also what systemd's systemd-modules-load.service expects. - Replace defconfig with performance_defconfig, so there is one config file less to maintain. - Remove the SCLP call home device driver, which was never useful. - Cleanups all over the place. -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEE3QHqV+H2a8xAv27vjYWKoQLXFBgFAl0iEpcACgkQjYWKoQLX FBgtZwf8DOJ6COUG91jKP0RSDlc2YvIMBxopQ38ql1lIsTj5t6DvJ2z3X5uct1wy 6mMiF01VuyD4V4UXbTJQrihzNx7D4dUh47s2sS+diGHxJyXacVxlmjS5k+6pLIUO AyLvtCcoqDPPiThqnSTZFRm/TcfO/25fCG/IdjrFGj1MD09wHpUCh16tmRPTGFlC BWZeilDT77fVXnh7Ggn3JB0mQay5PAw2ODOxELHTUBaLmYF8RJPPVKBPmXGl9P1W 84ESm2p+iALGGWDiTOUad9eu8wyQci/V/R+hFgs0Bz/HRcjznNH5EVvfQNCD4VNF g/PET10nIQYZv2BNdi0cwRjR9jCFbw== =jp0i -----END PGP SIGNATURE----- Merge tag 's390-5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux Pull s390 updates from Vasily Gorbik: - Improve stop_machine wait logic: replace cpu_relax_yield call in generic stop_machine function with a weak stop_machine_yield function. This is overridden on s390, which yields the current cpu to the neighbouring cpu after a couple of retries, instead of blindly giving up the cpu to the hipervisor. This significantly improves stop_machine performance on s390 in overcommitted scenarios. This includes common code changes which have been Acked by Peter Zijlstra and Thomas Gleixner. - Improve jump label transformation speed: transform jump labels without using stop_machine. - Refactoring of the vfio-ccw cp handling, simplifying the code and avoiding unneeded allocating/copying. - Various vfio-ccw fixes (ccw translation, state machine). - Add support for vfio-ap queue interrupt control in the guest. This includes s390 kvm changes which have been Acked by Christian Borntraeger. - Add protected virtualization support for virtio-ccw. - Enforce both CONFIG_SMP and CONFIG_HOTPLUG_CPU, which allows to remove some code which most likely isn't working at all, besides that s390 didn't even compile for !CONFIG_SMP. - Support for special flagged EP11 CPRBs for zcrypt. - Handle PCI devices with no support for new MIO instructions. - Avoid KASAN false positives in reworked stack unwinder. - Couple of fixes for the QDIO layer. - Convert s390 specific documentation to ReST format. - Let s390 crypto modules return -ENODEV instead of -EOPNOTSUPP if hardware is missing. This way our modules behave like most other modules and which is also what systemd's systemd-modules-load.service expects. - Replace defconfig with performance_defconfig, so there is one config file less to maintain. - Remove the SCLP call home device driver, which was never useful. - Cleanups all over the place. * tag 's390-5.3-1' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: (83 commits) docs: s390: s390dbf: typos and formatting, update crash command docs: s390: unify and update s390dbf kdocs at debug.c docs: s390: restore important non-kdoc parts of s390dbf.rst vfio-ccw: Fix the conversion of Format-0 CCWs to Format-1 s390/pci: correctly handle MIO opt-out s390/pci: deal with devices that have no support for MIO instructions s390: ap: kvm: Enable PQAP/AQIC facility for the guest s390: ap: implement PAPQ AQIC interception in kernel vfio: ap: register IOMMU VFIO notifier s390: ap: kvm: add PQAP interception for AQIC s390/unwind: cleanup unused READ_ONCE_TASK_STACK s390/kasan: avoid false positives during stack unwind s390/qdio: don't touch the dsci in tiqdio_add_input_queues() s390/qdio: (re-)initialize tiqdio list entries s390/dasd: Fix a precision vs width bug in dasd_feature_list() s390/cio: introduce driver_override on the css bus vfio-ccw: make convert_ccw0_to_ccw1 static vfio-ccw: Remove copy_ccw_from_iova() vfio-ccw: Factor out the ccw0-to-ccw1 transition vfio-ccw: Copy CCW data outside length calculation ...
120 lines
3.3 KiB
C
120 lines
3.3 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright IBM Corp. 1999, 2009
|
|
*
|
|
* Author(s): Martin Schwidefsky <schwidefsky@de.ibm.com>
|
|
*/
|
|
|
|
#ifndef __ASM_CTL_REG_H
|
|
#define __ASM_CTL_REG_H
|
|
|
|
#include <linux/const.h>
|
|
|
|
#define CR0_CLOCK_COMPARATOR_SIGN _BITUL(63 - 10)
|
|
#define CR0_EMERGENCY_SIGNAL_SUBMASK _BITUL(63 - 49)
|
|
#define CR0_EXTERNAL_CALL_SUBMASK _BITUL(63 - 50)
|
|
#define CR0_CLOCK_COMPARATOR_SUBMASK _BITUL(63 - 52)
|
|
#define CR0_CPU_TIMER_SUBMASK _BITUL(63 - 53)
|
|
#define CR0_SERVICE_SIGNAL_SUBMASK _BITUL(63 - 54)
|
|
#define CR0_UNUSED_56 _BITUL(63 - 56)
|
|
#define CR0_INTERRUPT_KEY_SUBMASK _BITUL(63 - 57)
|
|
#define CR0_MEASUREMENT_ALERT_SUBMASK _BITUL(63 - 58)
|
|
|
|
#define CR2_GUARDED_STORAGE _BITUL(63 - 59)
|
|
|
|
#define CR14_UNUSED_32 _BITUL(63 - 32)
|
|
#define CR14_UNUSED_33 _BITUL(63 - 33)
|
|
#define CR14_CHANNEL_REPORT_SUBMASK _BITUL(63 - 35)
|
|
#define CR14_RECOVERY_SUBMASK _BITUL(63 - 36)
|
|
#define CR14_DEGRADATION_SUBMASK _BITUL(63 - 37)
|
|
#define CR14_EXTERNAL_DAMAGE_SUBMASK _BITUL(63 - 38)
|
|
#define CR14_WARNING_SUBMASK _BITUL(63 - 39)
|
|
|
|
#ifndef __ASSEMBLY__
|
|
|
|
#include <linux/bug.h>
|
|
|
|
#define __ctl_load(array, low, high) do { \
|
|
typedef struct { char _[sizeof(array)]; } addrtype; \
|
|
\
|
|
BUILD_BUG_ON(sizeof(addrtype) != (high - low + 1) * sizeof(long));\
|
|
asm volatile( \
|
|
" lctlg %1,%2,%0\n" \
|
|
: \
|
|
: "Q" (*(addrtype *)(&array)), "i" (low), "i" (high) \
|
|
: "memory"); \
|
|
} while (0)
|
|
|
|
#define __ctl_store(array, low, high) do { \
|
|
typedef struct { char _[sizeof(array)]; } addrtype; \
|
|
\
|
|
BUILD_BUG_ON(sizeof(addrtype) != (high - low + 1) * sizeof(long));\
|
|
asm volatile( \
|
|
" stctg %1,%2,%0\n" \
|
|
: "=Q" (*(addrtype *)(&array)) \
|
|
: "i" (low), "i" (high)); \
|
|
} while (0)
|
|
|
|
static __always_inline void __ctl_set_bit(unsigned int cr, unsigned int bit)
|
|
{
|
|
unsigned long reg;
|
|
|
|
__ctl_store(reg, cr, cr);
|
|
reg |= 1UL << bit;
|
|
__ctl_load(reg, cr, cr);
|
|
}
|
|
|
|
static __always_inline void __ctl_clear_bit(unsigned int cr, unsigned int bit)
|
|
{
|
|
unsigned long reg;
|
|
|
|
__ctl_store(reg, cr, cr);
|
|
reg &= ~(1UL << bit);
|
|
__ctl_load(reg, cr, cr);
|
|
}
|
|
|
|
void smp_ctl_set_bit(int cr, int bit);
|
|
void smp_ctl_clear_bit(int cr, int bit);
|
|
|
|
union ctlreg0 {
|
|
unsigned long val;
|
|
struct {
|
|
unsigned long : 8;
|
|
unsigned long tcx : 1; /* Transactional-Execution control */
|
|
unsigned long pifo : 1; /* Transactional-Execution Program-
|
|
Interruption-Filtering Override */
|
|
unsigned long : 22;
|
|
unsigned long : 3;
|
|
unsigned long lap : 1; /* Low-address-protection control */
|
|
unsigned long : 4;
|
|
unsigned long edat : 1; /* Enhanced-DAT-enablement control */
|
|
unsigned long : 2;
|
|
unsigned long iep : 1; /* Instruction-Execution-Protection */
|
|
unsigned long : 1;
|
|
unsigned long afp : 1; /* AFP-register control */
|
|
unsigned long vx : 1; /* Vector enablement control */
|
|
unsigned long : 7;
|
|
unsigned long sssm : 1; /* Service signal subclass mask */
|
|
unsigned long : 9;
|
|
};
|
|
};
|
|
|
|
union ctlreg2 {
|
|
unsigned long val;
|
|
struct {
|
|
unsigned long : 33;
|
|
unsigned long ducto : 25;
|
|
unsigned long : 1;
|
|
unsigned long gse : 1;
|
|
unsigned long : 1;
|
|
unsigned long tds : 1;
|
|
unsigned long tdc : 2;
|
|
};
|
|
};
|
|
|
|
#define ctl_set_bit(cr, bit) smp_ctl_set_bit(cr, bit)
|
|
#define ctl_clear_bit(cr, bit) smp_ctl_clear_bit(cr, bit)
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
#endif /* __ASM_CTL_REG_H */
|