Commit a525df05 authored by Linus Torvalds's avatar Linus Torvalds

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
parents e6754825 b0c41b8b
...@@ -152,6 +152,11 @@ OCXL_IOCTL_IRQ_SET_FD: ...@@ -152,6 +152,11 @@ OCXL_IOCTL_IRQ_SET_FD:
Associate an event fd to an AFU interrupt so that the user process Associate an event fd to an AFU interrupt so that the user process
can be notified when the AFU sends an interrupt. 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 mmap
---- ----
......
...@@ -101,7 +101,8 @@ $(addprefix $(obj)/,$(zlib-y)): \ ...@@ -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 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 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)) $(addprefix $(obj)/,$(libfdtheader))
src-wlib-y := string.S crt0.S stdio.c decompress.c main.c \ 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 = { ...@@ -874,7 +874,6 @@ struct ibm_arch_vec __cacheline_aligned ibm_architecture_vec = {
.mmu = 0, .mmu = 0,
.hash_ext = 0, .hash_ext = 0,
.radix_ext = 0, .radix_ext = 0,
.byte22 = 0,
}, },
/* option vector 6: IBM PAPR hints */ /* option vector 6: IBM PAPR hints */
......
...@@ -102,10 +102,32 @@ static long afu_ioctl_attach(struct ocxl_context *ctx, ...@@ -102,10 +102,32 @@ static long afu_ioctl_attach(struct ocxl_context *ctx,
return rc; 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" : \ #define CMD_STR(x) (x == OCXL_IOCTL_ATTACH ? "ATTACH" : \
x == OCXL_IOCTL_IRQ_ALLOC ? "IRQ_ALLOC" : \ x == OCXL_IOCTL_IRQ_ALLOC ? "IRQ_ALLOC" : \
x == OCXL_IOCTL_IRQ_FREE ? "IRQ_FREE" : \ x == OCXL_IOCTL_IRQ_FREE ? "IRQ_FREE" : \
x == OCXL_IOCTL_IRQ_SET_FD ? "IRQ_SET_FD" : \ x == OCXL_IOCTL_IRQ_SET_FD ? "IRQ_SET_FD" : \
x == OCXL_IOCTL_GET_METADATA ? "GET_METADATA" : \
"UNKNOWN") "UNKNOWN")
static long afu_ioctl(struct file *file, unsigned int cmd, static long afu_ioctl(struct file *file, unsigned int cmd,
...@@ -159,6 +181,11 @@ 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); irq_fd.eventfd);
break; break;
case OCXL_IOCTL_GET_METADATA:
rc = afu_ioctl_get_metadata(ctx,
(struct ocxl_ioctl_metadata __user *) args);
break;
default: default:
rc = -EINVAL; rc = -EINVAL;
} }
......
...@@ -32,6 +32,22 @@ struct ocxl_ioctl_attach { ...@@ -32,6 +32,22 @@ struct ocxl_ioctl_attach {
__u64 reserved3; __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 { struct ocxl_ioctl_irq_fd {
__u64 irq_offset; __u64 irq_offset;
__s32 eventfd; __s32 eventfd;
...@@ -45,5 +61,6 @@ struct ocxl_ioctl_irq_fd { ...@@ -45,5 +61,6 @@ struct ocxl_ioctl_irq_fd {
#define OCXL_IOCTL_IRQ_ALLOC _IOR(OCXL_MAGIC, 0x11, __u64) #define OCXL_IOCTL_IRQ_ALLOC _IOR(OCXL_MAGIC, 0x11, __u64)
#define OCXL_IOCTL_IRQ_FREE _IOW(OCXL_MAGIC, 0x12, __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_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 */ #endif /* _UAPI_MISC_OCXL_H */
...@@ -135,6 +135,16 @@ static int run_test(void *addr, unsigned long size) ...@@ -135,6 +135,16 @@ static int run_test(void *addr, unsigned long size)
return 0; 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) int test_anon(void)
{ {
unsigned long align; unsigned long align;
...@@ -145,6 +155,8 @@ int test_anon(void) ...@@ -145,6 +155,8 @@ int test_anon(void)
void *mallocblock; void *mallocblock;
unsigned long mallocsize; unsigned long mallocsize;
SKIP_IF(!syscall_available());
if (getpagesize() != 0x10000) { if (getpagesize() != 0x10000) {
fprintf(stderr, "Kernel page size must be 64K!\n"); fprintf(stderr, "Kernel page size must be 64K!\n");
return 1; return 1;
...@@ -180,6 +192,8 @@ int test_file(void) ...@@ -180,6 +192,8 @@ int test_file(void)
off_t filesize; off_t filesize;
int fd; int fd;
SKIP_IF(!syscall_available());
fd = open(file_name, O_RDWR); fd = open(file_name, O_RDWR);
if (fd == -1) { if (fd == -1) {
perror("failed to open file"); perror("failed to open file");
......
...@@ -16,7 +16,7 @@ $(OUTPUT)/tm-syscall: tm-syscall-asm.S ...@@ -16,7 +16,7 @@ $(OUTPUT)/tm-syscall: tm-syscall-asm.S
$(OUTPUT)/tm-syscall: CFLAGS += -I../../../../../usr/include $(OUTPUT)/tm-syscall: CFLAGS += -I../../../../../usr/include
$(OUTPUT)/tm-tmspr: CFLAGS += -pthread $(OUTPUT)/tm-tmspr: CFLAGS += -pthread
$(OUTPUT)/tm-vmx-unavail: CFLAGS += -pthread -m64 $(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-unavailable: CFLAGS += -O0 -pthread -m64 -Wno-error=uninitialized -mvsx
$(OUTPUT)/tm-trap: CFLAGS += -O0 -pthread -m64 $(OUTPUT)/tm-trap: CFLAGS += -O0 -pthread -m64
......
...@@ -255,6 +255,8 @@ int tm_trap_test(void) ...@@ -255,6 +255,8 @@ int tm_trap_test(void)
struct sigaction trap_sa; struct sigaction trap_sa;
SKIP_IF(!have_htm());
trap_sa.sa_flags = SA_SIGINFO; trap_sa.sa_flags = SA_SIGINFO;
trap_sa.sa_sigaction = trap_signal_handler; trap_sa.sa_sigaction = trap_signal_handler;
sigaction(SIGTRAP, &trap_sa, NULL); sigaction(SIGTRAP, &trap_sa, NULL);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment