Skip to content

Commit

Permalink
Merge tag 'powerpc-4.16-5' of git://git.kernel.org/pub/scm/linux/kern…
Browse files Browse the repository at this point in the history
…el/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
  • Loading branch information
torvalds committed Mar 9, 2018
2 parents e675482 + b0c41b8 commit a525df0
Show file tree
Hide file tree
Showing 8 changed files with 68 additions and 3 deletions.
5 changes: 5 additions & 0 deletions Documentation/accelerators/ocxl.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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
----
Expand Down
3 changes: 2 additions & 1 deletion arch/powerpc/boot/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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 \
Expand Down
1 change: 0 additions & 1 deletion arch/powerpc/kernel/prom_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down
27 changes: 27 additions & 0 deletions drivers/misc/ocxl/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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;
}
Expand Down
17 changes: 17 additions & 0 deletions include/uapi/misc/ocxl.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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 */
14 changes: 14 additions & 0 deletions tools/testing/selftests/powerpc/mm/subpage_prot.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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");
Expand Down
2 changes: 1 addition & 1 deletion tools/testing/selftests/powerpc/tm/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 2 additions & 0 deletions tools/testing/selftests/powerpc/tm/tm-trap.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit a525df0

Please sign in to comment.