mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-07-05 21:35:46 +02:00
more s390 updates for 6.12 merge window
- Clean up and improve vdso code: use SYM_* macros for function and data annotations, add CFI annotations to fix GDB unwinding, optimize the chacha20 implementation - Add vfio-ap driver feature advertisement for use by libvirt and mdevctl -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEE3QHqV+H2a8xAv27vjYWKoQLXFBgFAmb39nkACgkQjYWKoQLX FBiacggAlHrwDYIZdr7bd+0bJa8Wq5STrdo1XiohQhCrRg+4rXRaquEQszWVheRk qi/9u+MKJFtbd4VMbf+WqEi2P4Pnn5cByv+As3B4RMR0Tp3uQK5TlDbh7wbJ+pIG AQQoL5D2z05rvbYgc1Wvt/3lgrfs2EzUY3cAyIMmFwSp0On+psDuwuFVtWzH0jCr fxCwX7mrF6OoBMR0QSUxAvoOujUhd4CANk3n6rNxJfi2AC/gX/ZkFUrV5a3FvJ2Z X7fQgDc3rivsm5wFuoBvlrH5J1jhmWtsg8Tiygos7BBehpQ5NUsJMDGS8kR+avbF iYKg1oMy5/ZXekBjqkEMO6Vp3nCrdg== =Idf7 -----END PGP SIGNATURE----- Merge tag 's390-6.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux Pull more s390 updates from Vasily Gorbik: - Clean up and improve vdso code: use SYM_* macros for function and data annotations, add CFI annotations to fix GDB unwinding, optimize the chacha20 implementation - Add vfio-ap driver feature advertisement for use by libvirt and mdevctl * tag 's390-6.12-2' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/vfio-ap: Driver feature advertisement s390/vdso: Use one large alternative instead of an alternative branch s390/vdso: Use SYM_DATA_START_LOCAL()/SYM_DATA_END() for data objects tools: Add additional SYM_*() stubs to linkage.h s390/vdso: Use macros for annotation of asm functions s390/vdso: Add CFI annotations to __arch_chacha20_blocks_nostack() s390/vdso: Fix comment within __arch_chacha20_blocks_nostack() s390/vdso: Get rid of permutation constants
This commit is contained in:
commit
e08d227840
|
@ -999,6 +999,36 @@ the vfio_ap mediated device to which it is assigned as long as each new APQN
|
||||||
resulting from plugging it in references a queue device bound to the vfio_ap
|
resulting from plugging it in references a queue device bound to the vfio_ap
|
||||||
device driver.
|
device driver.
|
||||||
|
|
||||||
|
Driver Features
|
||||||
|
===============
|
||||||
|
The vfio_ap driver exposes a sysfs file containing supported features.
|
||||||
|
This exists so third party tools (like Libvirt and mdevctl) can query the
|
||||||
|
availability of specific features.
|
||||||
|
|
||||||
|
The features list can be found here: /sys/bus/matrix/devices/matrix/features
|
||||||
|
|
||||||
|
Entries are space delimited. Each entry consists of a combination of
|
||||||
|
alphanumeric and underscore characters.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
cat /sys/bus/matrix/devices/matrix/features
|
||||||
|
guest_matrix dyn ap_config
|
||||||
|
|
||||||
|
the following features are advertised:
|
||||||
|
|
||||||
|
---------------+---------------------------------------------------------------+
|
||||||
|
| Flag | Description |
|
||||||
|
+==============+===============================================================+
|
||||||
|
| guest_matrix | guest_matrix attribute exists. It reports the matrix of |
|
||||||
|
| | adapters and domains that are or will be passed through to a |
|
||||||
|
| | guest when the mdev is attached to it. |
|
||||||
|
+--------------+---------------------------------------------------------------+
|
||||||
|
| dyn | Indicates hot plug/unplug of AP adapters, domains and control |
|
||||||
|
| | domains for a guest to which the mdev is attached. |
|
||||||
|
+------------+-----------------------------------------------------------------+
|
||||||
|
| ap_config | ap_config interface for one-shot modifications to mdev config |
|
||||||
|
+--------------+---------------------------------------------------------------+
|
||||||
|
|
||||||
Limitations
|
Limitations
|
||||||
===========
|
===========
|
||||||
Live guest migration is not supported for guests using AP devices without
|
Live guest migration is not supported for guests using AP devices without
|
||||||
|
|
|
@ -13,10 +13,7 @@
|
||||||
* for details.
|
* for details.
|
||||||
*/
|
*/
|
||||||
.macro vdso_func func
|
.macro vdso_func func
|
||||||
.globl __kernel_\func
|
SYM_FUNC_START(__kernel_\func)
|
||||||
.type __kernel_\func,@function
|
|
||||||
__ALIGN
|
|
||||||
__kernel_\func:
|
|
||||||
CFI_STARTPROC
|
CFI_STARTPROC
|
||||||
aghi %r15,-STACK_FRAME_VDSO_OVERHEAD
|
aghi %r15,-STACK_FRAME_VDSO_OVERHEAD
|
||||||
CFI_DEF_CFA_OFFSET (STACK_FRAME_USER_OVERHEAD + STACK_FRAME_VDSO_OVERHEAD)
|
CFI_DEF_CFA_OFFSET (STACK_FRAME_USER_OVERHEAD + STACK_FRAME_VDSO_OVERHEAD)
|
||||||
|
@ -32,7 +29,7 @@ __kernel_\func:
|
||||||
CFI_RESTORE 15
|
CFI_RESTORE 15
|
||||||
br %r14
|
br %r14
|
||||||
CFI_ENDPROC
|
CFI_ENDPROC
|
||||||
.size __kernel_\func,.-__kernel_\func
|
SYM_FUNC_END(__kernel_\func)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
vdso_func gettimeofday
|
vdso_func gettimeofday
|
||||||
|
@ -41,16 +38,13 @@ vdso_func clock_gettime
|
||||||
vdso_func getcpu
|
vdso_func getcpu
|
||||||
|
|
||||||
.macro vdso_syscall func,syscall
|
.macro vdso_syscall func,syscall
|
||||||
.globl __kernel_\func
|
SYM_FUNC_START(__kernel_\func)
|
||||||
.type __kernel_\func,@function
|
|
||||||
__ALIGN
|
|
||||||
__kernel_\func:
|
|
||||||
CFI_STARTPROC
|
CFI_STARTPROC
|
||||||
svc \syscall
|
svc \syscall
|
||||||
/* Make sure we notice when a syscall returns, which shouldn't happen */
|
/* Make sure we notice when a syscall returns, which shouldn't happen */
|
||||||
.word 0
|
.word 0
|
||||||
CFI_ENDPROC
|
CFI_ENDPROC
|
||||||
.size __kernel_\func,.-__kernel_\func
|
SYM_FUNC_END(__kernel_\func)
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
vdso_syscall restart_syscall,__NR_restart_syscall
|
vdso_syscall restart_syscall,__NR_restart_syscall
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0 */
|
/* SPDX-License-Identifier: GPL-2.0 */
|
||||||
|
|
||||||
|
#include <linux/stringify.h>
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <asm/alternative.h>
|
#include <asm/alternative.h>
|
||||||
|
#include <asm/dwarf.h>
|
||||||
#include <asm/fpu-insn.h>
|
#include <asm/fpu-insn.h>
|
||||||
|
|
||||||
#define STATE0 %v0
|
#define STATE0 %v0
|
||||||
|
@ -12,9 +14,6 @@
|
||||||
#define COPY1 %v5
|
#define COPY1 %v5
|
||||||
#define COPY2 %v6
|
#define COPY2 %v6
|
||||||
#define COPY3 %v7
|
#define COPY3 %v7
|
||||||
#define PERM4 %v16
|
|
||||||
#define PERM8 %v17
|
|
||||||
#define PERM12 %v18
|
|
||||||
#define BEPERM %v19
|
#define BEPERM %v19
|
||||||
#define TMP0 %v20
|
#define TMP0 %v20
|
||||||
#define TMP1 %v21
|
#define TMP1 %v21
|
||||||
|
@ -23,13 +22,11 @@
|
||||||
|
|
||||||
.section .rodata
|
.section .rodata
|
||||||
|
|
||||||
.balign 128
|
.balign 32
|
||||||
.Lconstants:
|
SYM_DATA_START_LOCAL(chacha20_constants)
|
||||||
.long 0x61707865,0x3320646e,0x79622d32,0x6b206574 # endian-neutral
|
.long 0x61707865,0x3320646e,0x79622d32,0x6b206574 # endian-neutral
|
||||||
.long 0x04050607,0x08090a0b,0x0c0d0e0f,0x00010203 # rotl 4 bytes
|
|
||||||
.long 0x08090a0b,0x0c0d0e0f,0x00010203,0x04050607 # rotl 8 bytes
|
|
||||||
.long 0x0c0d0e0f,0x00010203,0x04050607,0x08090a0b # rotl 12 bytes
|
|
||||||
.long 0x03020100,0x07060504,0x0b0a0908,0x0f0e0d0c # byte swap
|
.long 0x03020100,0x07060504,0x0b0a0908,0x0f0e0d0c # byte swap
|
||||||
|
SYM_DATA_END(chacha20_constants)
|
||||||
|
|
||||||
.text
|
.text
|
||||||
/*
|
/*
|
||||||
|
@ -43,13 +40,14 @@
|
||||||
* size_t nblocks)
|
* size_t nblocks)
|
||||||
*/
|
*/
|
||||||
SYM_FUNC_START(__arch_chacha20_blocks_nostack)
|
SYM_FUNC_START(__arch_chacha20_blocks_nostack)
|
||||||
larl %r1,.Lconstants
|
CFI_STARTPROC
|
||||||
|
larl %r1,chacha20_constants
|
||||||
|
|
||||||
/* COPY0 = "expand 32-byte k" */
|
/* COPY0 = "expand 32-byte k" */
|
||||||
VL COPY0,0,,%r1
|
VL COPY0,0,,%r1
|
||||||
|
|
||||||
/* PERM4-PERM12,BEPERM = byte selectors for VPERM */
|
/* BEPERM = byte selectors for VPERM */
|
||||||
VLM PERM4,BEPERM,16,%r1
|
ALTERNATIVE __stringify(VL BEPERM,16,,%r1), "brcl 0,0", ALT_FACILITY(148)
|
||||||
|
|
||||||
/* COPY1,COPY2 = key */
|
/* COPY1,COPY2 = key */
|
||||||
VLM COPY1,COPY2,0,%r3
|
VLM COPY1,COPY2,0,%r3
|
||||||
|
@ -89,11 +87,11 @@ SYM_FUNC_START(__arch_chacha20_blocks_nostack)
|
||||||
VERLLF STATE1,STATE1,7
|
VERLLF STATE1,STATE1,7
|
||||||
|
|
||||||
/* STATE1[0,1,2,3] = STATE1[1,2,3,0] */
|
/* STATE1[0,1,2,3] = STATE1[1,2,3,0] */
|
||||||
VPERM STATE1,STATE1,STATE1,PERM4
|
VSLDB STATE1,STATE1,STATE1,4
|
||||||
/* STATE2[0,1,2,3] = STATE2[2,3,0,1] */
|
/* STATE2[0,1,2,3] = STATE2[2,3,0,1] */
|
||||||
VPERM STATE2,STATE2,STATE2,PERM8
|
VSLDB STATE2,STATE2,STATE2,8
|
||||||
/* STATE3[0,1,2,3] = STATE3[3,0,1,2] */
|
/* STATE3[0,1,2,3] = STATE3[3,0,1,2] */
|
||||||
VPERM STATE3,STATE3,STATE3,PERM12
|
VSLDB STATE3,STATE3,STATE3,12
|
||||||
|
|
||||||
/* STATE0 += STATE1, STATE3 = rotl32(STATE3 ^ STATE0, 16) */
|
/* STATE0 += STATE1, STATE3 = rotl32(STATE3 ^ STATE0, 16) */
|
||||||
VAF STATE0,STATE0,STATE1
|
VAF STATE0,STATE0,STATE1
|
||||||
|
@ -116,32 +114,38 @@ SYM_FUNC_START(__arch_chacha20_blocks_nostack)
|
||||||
VERLLF STATE1,STATE1,7
|
VERLLF STATE1,STATE1,7
|
||||||
|
|
||||||
/* STATE1[0,1,2,3] = STATE1[3,0,1,2] */
|
/* STATE1[0,1,2,3] = STATE1[3,0,1,2] */
|
||||||
VPERM STATE1,STATE1,STATE1,PERM12
|
VSLDB STATE1,STATE1,STATE1,12
|
||||||
/* STATE2[0,1,2,3] = STATE2[2,3,0,1] */
|
/* STATE2[0,1,2,3] = STATE2[2,3,0,1] */
|
||||||
VPERM STATE2,STATE2,STATE2,PERM8
|
VSLDB STATE2,STATE2,STATE2,8
|
||||||
/* STATE3[0,1,2,3] = STATE3[1,2,3,0] */
|
/* STATE3[0,1,2,3] = STATE3[1,2,3,0] */
|
||||||
VPERM STATE3,STATE3,STATE3,PERM4
|
VSLDB STATE3,STATE3,STATE3,4
|
||||||
brctg %r0,.Ldoubleround
|
brctg %r0,.Ldoubleround
|
||||||
|
|
||||||
/* OUTPUT0 = STATE0 + STATE0 */
|
/* OUTPUT0 = STATE0 + COPY0 */
|
||||||
VAF STATE0,STATE0,COPY0
|
VAF STATE0,STATE0,COPY0
|
||||||
/* OUTPUT1 = STATE1 + STATE1 */
|
/* OUTPUT1 = STATE1 + COPY1 */
|
||||||
VAF STATE1,STATE1,COPY1
|
VAF STATE1,STATE1,COPY1
|
||||||
/* OUTPUT2 = STATE2 + STATE2 */
|
/* OUTPUT2 = STATE2 + COPY2 */
|
||||||
VAF STATE2,STATE2,COPY2
|
VAF STATE2,STATE2,COPY2
|
||||||
/* OUTPUT2 = STATE3 + STATE3 */
|
/* OUTPUT3 = STATE3 + COPY3 */
|
||||||
VAF STATE3,STATE3,COPY3
|
VAF STATE3,STATE3,COPY3
|
||||||
|
|
||||||
/*
|
ALTERNATIVE \
|
||||||
* 32 bit wise little endian store to OUTPUT. If the vector
|
__stringify( \
|
||||||
* enhancement facility 2 is not installed use the slow path.
|
/* Convert STATE to little endian and store to OUTPUT */\
|
||||||
*/
|
VPERM TMP0,STATE0,STATE0,BEPERM; \
|
||||||
ALTERNATIVE "brc 0xf,.Lstoreslow", "nop", ALT_FACILITY(148)
|
VPERM TMP1,STATE1,STATE1,BEPERM; \
|
||||||
VSTBRF STATE0,0,,%r2
|
VPERM TMP2,STATE2,STATE2,BEPERM; \
|
||||||
VSTBRF STATE1,16,,%r2
|
VPERM TMP3,STATE3,STATE3,BEPERM; \
|
||||||
VSTBRF STATE2,32,,%r2
|
VSTM TMP0,TMP3,0,%r2), \
|
||||||
VSTBRF STATE3,48,,%r2
|
__stringify( \
|
||||||
.Lstoredone:
|
/* 32 bit wise little endian store to OUTPUT */ \
|
||||||
|
VSTBRF STATE0,0,,%r2; \
|
||||||
|
VSTBRF STATE1,16,,%r2; \
|
||||||
|
VSTBRF STATE2,32,,%r2; \
|
||||||
|
VSTBRF STATE3,48,,%r2; \
|
||||||
|
brcl 0,0), \
|
||||||
|
ALT_FACILITY(148)
|
||||||
|
|
||||||
/* ++COPY3.COUNTER */
|
/* ++COPY3.COUNTER */
|
||||||
/* alsih %r3,1 */
|
/* alsih %r3,1 */
|
||||||
|
@ -173,13 +177,5 @@ SYM_FUNC_START(__arch_chacha20_blocks_nostack)
|
||||||
VZERO TMP3
|
VZERO TMP3
|
||||||
|
|
||||||
br %r14
|
br %r14
|
||||||
|
CFI_ENDPROC
|
||||||
.Lstoreslow:
|
|
||||||
/* Convert STATE to little endian format and store to OUTPUT */
|
|
||||||
VPERM TMP0,STATE0,STATE0,BEPERM
|
|
||||||
VPERM TMP1,STATE1,STATE1,BEPERM
|
|
||||||
VPERM TMP2,STATE2,STATE2,BEPERM
|
|
||||||
VPERM TMP3,STATE3,STATE3,BEPERM
|
|
||||||
VSTM TMP0,TMP3,0,%r2
|
|
||||||
j .Lstoredone
|
|
||||||
SYM_FUNC_END(__arch_chacha20_blocks_nostack)
|
SYM_FUNC_END(__arch_chacha20_blocks_nostack)
|
||||||
|
|
|
@ -26,6 +26,18 @@ MODULE_LICENSE("GPL v2");
|
||||||
struct ap_matrix_dev *matrix_dev;
|
struct ap_matrix_dev *matrix_dev;
|
||||||
debug_info_t *vfio_ap_dbf_info;
|
debug_info_t *vfio_ap_dbf_info;
|
||||||
|
|
||||||
|
static ssize_t features_show(struct device *dev, struct device_attribute *attr, char *buf)
|
||||||
|
{
|
||||||
|
return sysfs_emit(buf, "guest_matrix hotplug ap_config\n");
|
||||||
|
}
|
||||||
|
static DEVICE_ATTR_RO(features);
|
||||||
|
|
||||||
|
static struct attribute *matrix_dev_attrs[] = {
|
||||||
|
&dev_attr_features.attr,
|
||||||
|
NULL,
|
||||||
|
};
|
||||||
|
ATTRIBUTE_GROUPS(matrix_dev);
|
||||||
|
|
||||||
/* Only type 10 adapters (CEX4 and later) are supported
|
/* Only type 10 adapters (CEX4 and later) are supported
|
||||||
* by the AP matrix device driver
|
* by the AP matrix device driver
|
||||||
*/
|
*/
|
||||||
|
@ -68,6 +80,7 @@ static struct device_driver matrix_driver = {
|
||||||
.name = "vfio_ap",
|
.name = "vfio_ap",
|
||||||
.bus = &matrix_bus,
|
.bus = &matrix_bus,
|
||||||
.suppress_bind_attrs = true,
|
.suppress_bind_attrs = true,
|
||||||
|
.dev_groups = matrix_dev_groups,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int vfio_ap_matrix_dev_create(void)
|
static int vfio_ap_matrix_dev_create(void)
|
||||||
|
|
|
@ -4,7 +4,9 @@
|
||||||
#include <linux/export.h>
|
#include <linux/export.h>
|
||||||
|
|
||||||
#define SYM_FUNC_START(x) .globl x; x:
|
#define SYM_FUNC_START(x) .globl x; x:
|
||||||
|
|
||||||
#define SYM_FUNC_END(x)
|
#define SYM_FUNC_END(x)
|
||||||
|
#define SYM_DATA_START(x) .globl x; x:
|
||||||
|
#define SYM_DATA_START_LOCAL(x) x:
|
||||||
|
#define SYM_DATA_END(x)
|
||||||
|
|
||||||
#endif /* _TOOLS_INCLUDE_LINUX_LINKAGE_H */
|
#endif /* _TOOLS_INCLUDE_LINUX_LINKAGE_H */
|
||||||
|
|
Loading…
Reference in New Issue
Block a user