Merge tag 'powerpc-4.16-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux
Pull powerpc fixes from Michael Ellerman: "One notable fix to properly advertise our support for a new firmware feature, caused by two series conflicting semantically but not textually. There's a new ioctl for the new ocxl driver, which is not a fix, but needed to complete the userspace API and good to have before the driver is in a released kernel. Finally three minor selftest fixes, and a fix for intermittent build failures for some obscure platforms, caused by a missing make dependency. Thanks to: Alastair D'Silva, Bharata B Rao, Guenter Roeck" * tag 'powerpc-4.16-5' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux: powerpc/pseries: Fix vector5 in ibm architecture vector table ocxl: Document the OCXL_IOCTL_GET_METADATA IOCTL ocxl: Add get_metadata IOCTL to share OCXL information to userspace selftests/powerpc: Skip the subpage_prot tests if the syscall is unavailable selftests/powerpc: Fix missing clean of pmu/lib.o powerpc/boot: Fix random libfdt related build errors selftests/powerpc: Skip tm-trap if transactional memory is not enabled
This commit is contained in:
@@ -152,6 +152,11 @@ OCXL_IOCTL_IRQ_SET_FD:
|
||||
Associate an event fd to an AFU interrupt so that the user process
|
||||
can be notified when the AFU sends an interrupt.
|
||||
|
||||
OCXL_IOCTL_GET_METADATA:
|
||||
|
||||
Obtains configuration information from the card, such at the size of
|
||||
MMIO areas, the AFU version, and the PASID for the current context.
|
||||
|
||||
|
||||
mmap
|
||||
----
|
||||
|
||||
@@ -101,7 +101,8 @@ $(addprefix $(obj)/,$(zlib-y)): \
|
||||
libfdt := fdt.c fdt_ro.c fdt_wip.c fdt_sw.c fdt_rw.c fdt_strerror.c
|
||||
libfdtheader := fdt.h libfdt.h libfdt_internal.h
|
||||
|
||||
$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o opal.o): \
|
||||
$(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o epapr.o opal.o \
|
||||
treeboot-akebono.o treeboot-currituck.o treeboot-iss4xx.o): \
|
||||
$(addprefix $(obj)/,$(libfdtheader))
|
||||
|
||||
src-wlib-y := string.S crt0.S stdio.c decompress.c main.c \
|
||||
|
||||
@@ -874,7 +874,6 @@ struct ibm_arch_vec __cacheline_aligned ibm_architecture_vec = {
|
||||
.mmu = 0,
|
||||
.hash_ext = 0,
|
||||
.radix_ext = 0,
|
||||
.byte22 = 0,
|
||||
},
|
||||
|
||||
/* option vector 6: IBM PAPR hints */
|
||||
|
||||
@@ -102,10 +102,32 @@ static long afu_ioctl_attach(struct ocxl_context *ctx,
|
||||
return rc;
|
||||
}
|
||||
|
||||
static long afu_ioctl_get_metadata(struct ocxl_context *ctx,
|
||||
struct ocxl_ioctl_metadata __user *uarg)
|
||||
{
|
||||
struct ocxl_ioctl_metadata arg;
|
||||
|
||||
memset(&arg, 0, sizeof(arg));
|
||||
|
||||
arg.version = 0;
|
||||
|
||||
arg.afu_version_major = ctx->afu->config.version_major;
|
||||
arg.afu_version_minor = ctx->afu->config.version_minor;
|
||||
arg.pasid = ctx->pasid;
|
||||
arg.pp_mmio_size = ctx->afu->config.pp_mmio_stride;
|
||||
arg.global_mmio_size = ctx->afu->config.global_mmio_size;
|
||||
|
||||
if (copy_to_user(uarg, &arg, sizeof(arg)))
|
||||
return -EFAULT;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define CMD_STR(x) (x == OCXL_IOCTL_ATTACH ? "ATTACH" : \
|
||||
x == OCXL_IOCTL_IRQ_ALLOC ? "IRQ_ALLOC" : \
|
||||
x == OCXL_IOCTL_IRQ_FREE ? "IRQ_FREE" : \
|
||||
x == OCXL_IOCTL_IRQ_SET_FD ? "IRQ_SET_FD" : \
|
||||
x == OCXL_IOCTL_GET_METADATA ? "GET_METADATA" : \
|
||||
"UNKNOWN")
|
||||
|
||||
static long afu_ioctl(struct file *file, unsigned int cmd,
|
||||
@@ -159,6 +181,11 @@ static long afu_ioctl(struct file *file, unsigned int cmd,
|
||||
irq_fd.eventfd);
|
||||
break;
|
||||
|
||||
case OCXL_IOCTL_GET_METADATA:
|
||||
rc = afu_ioctl_get_metadata(ctx,
|
||||
(struct ocxl_ioctl_metadata __user *) args);
|
||||
break;
|
||||
|
||||
default:
|
||||
rc = -EINVAL;
|
||||
}
|
||||
|
||||
@@ -32,6 +32,22 @@ struct ocxl_ioctl_attach {
|
||||
__u64 reserved3;
|
||||
};
|
||||
|
||||
struct ocxl_ioctl_metadata {
|
||||
__u16 version; // struct version, always backwards compatible
|
||||
|
||||
// Version 0 fields
|
||||
__u8 afu_version_major;
|
||||
__u8 afu_version_minor;
|
||||
__u32 pasid; // PASID assigned to the current context
|
||||
|
||||
__u64 pp_mmio_size; // Per PASID MMIO size
|
||||
__u64 global_mmio_size;
|
||||
|
||||
// End version 0 fields
|
||||
|
||||
__u64 reserved[13]; // Total of 16*u64
|
||||
};
|
||||
|
||||
struct ocxl_ioctl_irq_fd {
|
||||
__u64 irq_offset;
|
||||
__s32 eventfd;
|
||||
@@ -45,5 +61,6 @@ struct ocxl_ioctl_irq_fd {
|
||||
#define OCXL_IOCTL_IRQ_ALLOC _IOR(OCXL_MAGIC, 0x11, __u64)
|
||||
#define OCXL_IOCTL_IRQ_FREE _IOW(OCXL_MAGIC, 0x12, __u64)
|
||||
#define OCXL_IOCTL_IRQ_SET_FD _IOW(OCXL_MAGIC, 0x13, struct ocxl_ioctl_irq_fd)
|
||||
#define OCXL_IOCTL_GET_METADATA _IOR(OCXL_MAGIC, 0x14, struct ocxl_ioctl_metadata)
|
||||
|
||||
#endif /* _UAPI_MISC_OCXL_H */
|
||||
|
||||
@@ -135,6 +135,16 @@ static int run_test(void *addr, unsigned long size)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int syscall_available(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
errno = 0;
|
||||
rc = syscall(__NR_subpage_prot, 0, 0, 0);
|
||||
|
||||
return rc == 0 || (errno != ENOENT && errno != ENOSYS);
|
||||
}
|
||||
|
||||
int test_anon(void)
|
||||
{
|
||||
unsigned long align;
|
||||
@@ -145,6 +155,8 @@ int test_anon(void)
|
||||
void *mallocblock;
|
||||
unsigned long mallocsize;
|
||||
|
||||
SKIP_IF(!syscall_available());
|
||||
|
||||
if (getpagesize() != 0x10000) {
|
||||
fprintf(stderr, "Kernel page size must be 64K!\n");
|
||||
return 1;
|
||||
@@ -180,6 +192,8 @@ int test_file(void)
|
||||
off_t filesize;
|
||||
int fd;
|
||||
|
||||
SKIP_IF(!syscall_available());
|
||||
|
||||
fd = open(file_name, O_RDWR);
|
||||
if (fd == -1) {
|
||||
perror("failed to open file");
|
||||
|
||||
@@ -16,7 +16,7 @@ $(OUTPUT)/tm-syscall: tm-syscall-asm.S
|
||||
$(OUTPUT)/tm-syscall: CFLAGS += -I../../../../../usr/include
|
||||
$(OUTPUT)/tm-tmspr: CFLAGS += -pthread
|
||||
$(OUTPUT)/tm-vmx-unavail: CFLAGS += -pthread -m64
|
||||
$(OUTPUT)/tm-resched-dscr: ../pmu/lib.o
|
||||
$(OUTPUT)/tm-resched-dscr: ../pmu/lib.c
|
||||
$(OUTPUT)/tm-unavailable: CFLAGS += -O0 -pthread -m64 -Wno-error=uninitialized -mvsx
|
||||
$(OUTPUT)/tm-trap: CFLAGS += -O0 -pthread -m64
|
||||
|
||||
|
||||
@@ -255,6 +255,8 @@ int tm_trap_test(void)
|
||||
|
||||
struct sigaction trap_sa;
|
||||
|
||||
SKIP_IF(!have_htm());
|
||||
|
||||
trap_sa.sa_flags = SA_SIGINFO;
|
||||
trap_sa.sa_sigaction = trap_signal_handler;
|
||||
sigaction(SIGTRAP, &trap_sa, NULL);
|
||||
|
||||
Reference in New Issue
Block a user