Lucky number 13! :)
Last week in v12 I had re-added some symbol exports to support later patches I have pending to enable loading heaps from modules. He reminded me that back around v3 (its been awhile!) I had removed those exports due to concerns about the fact that we don't support module removal.
So I'm respinning the patches, removing the exports again. I'll submit a patch to re-add them in a later series enabling moduels which can be reviewed indepently.
With that done, lets get on to the boilerplate!
The patchset implements per-heap devices which can be opened directly and then an ioctl is used to allocate a dmabuf from the heap.
The interface is similar, but much simpler then IONs, only providing an ALLOC ioctl.
Also, I've provided relatively simple system and cma heaps.
I've booted and tested these patches with AOSP on the HiKey960 using the kernel tree here: https://git.linaro.org/people/john.stultz/android-dev.git/log/?h=dev/dma-buf...
And the userspace changes here: https://android-review.googlesource.com/c/device/linaro/hikey/+/909436
Compared to ION, this patchset is missing the system-contig, carveout and chunk heaps, as I don't have a device that uses those, so I'm unable to do much useful validation there. Additionally we have no upstream users of chunk or carveout, and the system-contig has been deprecated in the common/andoid-* kernels, so this should be ok.
I've also removed the stats accounting, since any such accounting should be implemented by dma-buf core or the heaps themselves.
New in v13: * Re-remove symbol exports, per discussion with Brian. I'll resubmit these separately in a later patch so they can be independently reviewed
thanks -john
Cc: Laura Abbott labbott@redhat.com Cc: Benjamin Gaignard benjamin.gaignard@linaro.org Cc: Sumit Semwal sumit.semwal@linaro.org Cc: Liam Mark lmark@codeaurora.org Cc: Pratik Patel pratikp@codeaurora.org Cc: Brian Starkey Brian.Starkey@arm.com Cc: Vincent Donnefort Vincent.Donnefort@arm.com Cc: Sudipto Paul Sudipto.Paul@arm.com Cc: Andrew F. Davis afd@ti.com Cc: Christoph Hellwig hch@infradead.org Cc: Chenbo Feng fengc@google.com Cc: Alistair Strachan astrachan@google.com Cc: Hridya Valsaraju hridya@google.com Cc: Hillf Danton hdanton@sina.com Cc: dri-devel@lists.freedesktop.org
Andrew F. Davis (1): dma-buf: Add dma-buf heaps framework
John Stultz (4): dma-buf: heaps: Add heap helpers dma-buf: heaps: Add system heap to dmabuf heaps dma-buf: heaps: Add CMA heap to dmabuf heaps kselftests: Add dma-heap test
MAINTAINERS | 18 ++ drivers/dma-buf/Kconfig | 11 + drivers/dma-buf/Makefile | 2 + drivers/dma-buf/dma-heap.c | 269 ++++++++++++++++++ drivers/dma-buf/heaps/Kconfig | 14 + drivers/dma-buf/heaps/Makefile | 4 + drivers/dma-buf/heaps/cma_heap.c | 178 ++++++++++++ drivers/dma-buf/heaps/heap-helpers.c | 268 +++++++++++++++++ drivers/dma-buf/heaps/heap-helpers.h | 55 ++++ drivers/dma-buf/heaps/system_heap.c | 124 ++++++++ include/linux/dma-heap.h | 59 ++++ include/uapi/linux/dma-heap.h | 55 ++++ tools/testing/selftests/dmabuf-heaps/Makefile | 9 + .../selftests/dmabuf-heaps/dmabuf-heap.c | 238 ++++++++++++++++ 14 files changed, 1304 insertions(+) create mode 100644 drivers/dma-buf/dma-heap.c create mode 100644 drivers/dma-buf/heaps/Kconfig create mode 100644 drivers/dma-buf/heaps/Makefile create mode 100644 drivers/dma-buf/heaps/cma_heap.c create mode 100644 drivers/dma-buf/heaps/heap-helpers.c create mode 100644 drivers/dma-buf/heaps/heap-helpers.h create mode 100644 drivers/dma-buf/heaps/system_heap.c create mode 100644 include/linux/dma-heap.h create mode 100644 include/uapi/linux/dma-heap.h create mode 100644 tools/testing/selftests/dmabuf-heaps/Makefile create mode 100644 tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c
From: "Andrew F. Davis" afd@ti.com
This framework allows a unified userspace interface for dma-buf exporters, allowing userland to allocate specific types of memory for use in dma-buf sharing.
Each heap is given its own device node, which a user can allocate a dma-buf fd from using the DMA_HEAP_IOC_ALLOC.
This code is an evoluiton of the Android ION implementation, and a big thanks is due to its authors/maintainers over time for their effort: Rebecca Schultz Zavin, Colin Cross, Benjamin Gaignard, Laura Abbott, and many other contributors!
Cc: Laura Abbott labbott@redhat.com Cc: Benjamin Gaignard benjamin.gaignard@linaro.org Cc: Sumit Semwal sumit.semwal@linaro.org Cc: Liam Mark lmark@codeaurora.org Cc: Pratik Patel pratikp@codeaurora.org Cc: Brian Starkey Brian.Starkey@arm.com Cc: Vincent Donnefort Vincent.Donnefort@arm.com Cc: Sudipto Paul Sudipto.Paul@arm.com Cc: Andrew F. Davis afd@ti.com Cc: Christoph Hellwig hch@infradead.org Cc: Chenbo Feng fengc@google.com Cc: Alistair Strachan astrachan@google.com Cc: Hridya Valsaraju hridya@google.com Cc: Hillf Danton hdanton@sina.com Cc: dri-devel@lists.freedesktop.org Reviewed-by: Benjamin Gaignard benjamin.gaignard@linaro.org Reviewed-by: Brian Starkey brian.starkey@arm.com Acked-by: Laura Abbott labbott@redhat.com Tested-by: Ayan Kumar Halder ayan.halder@arm.com Signed-off-by: Andrew F. Davis afd@ti.com Signed-off-by: John Stultz john.stultz@linaro.org --- v2: * Folded down fixes I had previously shared in implementing heaps * Make flags a u64 (Suggested by Laura) * Add PAGE_ALIGN() fix to the core alloc funciton * IOCTL fixups suggested by Brian * Added fixes suggested by Benjamin * Removed core stats mgmt, as that should be implemented by per-heap code * Changed alloc to return a dma-buf fd, rather than a buffer (as it simplifies error handling) v3: * Removed scare-quotes in MAINTAINERS email address * Get rid of .release function as it didn't do anything (from Christoph) * Renamed filp to file (suggested by Christoph) * Split out ioctl handling to separate function (suggested by Christoph) * Add comment documenting PAGE_ALIGN usage (suggested by Brian) * Switch from idr to Xarray (suggested by Brian) * Fixup cdev creation (suggested by Brian) * Avoid EXPORT_SYMBOL until we finalize modules (suggested by Brian) * Make struct dma_heap internal only (folded in from Andrew) * Small cleanups suggested by GregKH * Provide class->devnode callback to get consistent /dev/ subdirectory naming (Suggested by Bjorn) v4: * Folded down dma-heap.h change that was in a following patch * Added fd_flags entry to allocation structure and pass it through to heap code for use on dma-buf fd creation (suggested by Benjamin) v5: * Minor cleanups v6: * Improved error path handling, minor whitespace fixes, both suggested by Brian v7: * Longer Kconfig description to quiet checkpatch warnings * Re-add compat_ioctl bits (Hridya noticed 32bit userland wasn't working) v8: * Make struct dma_heap_ops consts (Suggested by Christoph) * Checkpatch whitespace fixups v9: * Minor cleanups suggested by Brian Starkey * Rename dma_heap_get_data->dma_heap_get_drvdata suggested by Hilf Danton v11: * Kconfig text improvements suggested by Randy Dunlap v12: * Add logic to prevent duplicately named heaps being added * Add symbol exports for heaps as modules v13: * Re-remove symbol exports per discussion w/ Brian. Will resubmit in a separte patch for review --- MAINTAINERS | 18 +++ drivers/dma-buf/Kconfig | 9 ++ drivers/dma-buf/Makefile | 1 + drivers/dma-buf/dma-heap.c | 269 ++++++++++++++++++++++++++++++++++ include/linux/dma-heap.h | 59 ++++++++ include/uapi/linux/dma-heap.h | 55 +++++++ 6 files changed, 411 insertions(+) create mode 100644 drivers/dma-buf/dma-heap.c create mode 100644 include/linux/dma-heap.h create mode 100644 include/uapi/linux/dma-heap.h
diff --git a/MAINTAINERS b/MAINTAINERS index a69e6db80c79..591c4c484558 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -4939,6 +4939,24 @@ F: include/linux/*fence.h F: Documentation/driver-api/dma-buf.rst T: git git://anongit.freedesktop.org/drm/drm-misc
+DMA-BUF HEAPS FRAMEWORK +M: Sumit Semwal sumit.semwal@linaro.org +R: Andrew F. Davis afd@ti.com +R: Benjamin Gaignard benjamin.gaignard@linaro.org +R: Liam Mark lmark@codeaurora.org +R: Laura Abbott labbott@redhat.com +R: Brian Starkey Brian.Starkey@arm.com +R: John Stultz john.stultz@linaro.org +S: Maintained +L: linux-media@vger.kernel.org +L: dri-devel@lists.freedesktop.org +L: linaro-mm-sig@lists.linaro.org (moderated for non-subscribers) +F: include/uapi/linux/dma-heap.h +F: include/linux/dma-heap.h +F: drivers/dma-buf/dma-heap.c +F: drivers/dma-buf/heaps/* +T: git git://anongit.freedesktop.org/drm/drm-misc + DMA GENERIC OFFLOAD ENGINE SUBSYSTEM M: Vinod Koul vkoul@kernel.org L: dmaengine@vger.kernel.org diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig index a23b6752d11a..bffa58fc3e6e 100644 --- a/drivers/dma-buf/Kconfig +++ b/drivers/dma-buf/Kconfig @@ -44,4 +44,13 @@ config DMABUF_SELFTESTS default n depends on DMA_SHARED_BUFFER
+menuconfig DMABUF_HEAPS + bool "DMA-BUF Userland Memory Heaps" + select DMA_SHARED_BUFFER + help + Choose this option to enable the DMA-BUF userland memory heaps. + This options creates per heap chardevs in /dev/dma_heap/ which + allows userspace to allocate dma-bufs that can be shared + between drivers. + endmenu diff --git a/drivers/dma-buf/Makefile b/drivers/dma-buf/Makefile index 03479da06422..caee5eb3d351 100644 --- a/drivers/dma-buf/Makefile +++ b/drivers/dma-buf/Makefile @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only obj-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \ dma-resv.o seqno-fence.o +obj-$(CONFIG_DMABUF_HEAPS) += dma-heap.o obj-$(CONFIG_SYNC_FILE) += sync_file.o obj-$(CONFIG_SW_SYNC) += sw_sync.o sync_debug.o obj-$(CONFIG_UDMABUF) += udmabuf.o diff --git a/drivers/dma-buf/dma-heap.c b/drivers/dma-buf/dma-heap.c new file mode 100644 index 000000000000..9a41b73e54b4 --- /dev/null +++ b/drivers/dma-buf/dma-heap.c @@ -0,0 +1,269 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Framework for userspace DMA-BUF allocations + * + * Copyright (C) 2011 Google, Inc. + * Copyright (C) 2019 Linaro Ltd. + */ + +#include <linux/cdev.h> +#include <linux/debugfs.h> +#include <linux/device.h> +#include <linux/dma-buf.h> +#include <linux/err.h> +#include <linux/xarray.h> +#include <linux/list.h> +#include <linux/slab.h> +#include <linux/uaccess.h> +#include <linux/syscalls.h> +#include <linux/dma-heap.h> +#include <uapi/linux/dma-heap.h> + +#define DEVNAME "dma_heap" + +#define NUM_HEAP_MINORS 128 + +/** + * struct dma_heap - represents a dmabuf heap in the system + * @name: used for debugging/device-node name + * @ops: ops struct for this heap + * @minor minor number of this heap device + * @heap_devt heap device node + * @heap_cdev heap char device + * + * Represents a heap of memory from which buffers can be made. + */ +struct dma_heap { + const char *name; + const struct dma_heap_ops *ops; + void *priv; + unsigned int minor; + dev_t heap_devt; + struct list_head list; + struct cdev heap_cdev; +}; + +static LIST_HEAD(heap_list); +static DEFINE_MUTEX(heap_list_lock); +static dev_t dma_heap_devt; +static struct class *dma_heap_class; +static DEFINE_XARRAY_ALLOC(dma_heap_minors); + +static int dma_heap_buffer_alloc(struct dma_heap *heap, size_t len, + unsigned int fd_flags, + unsigned int heap_flags) +{ + /* + * Allocations from all heaps have to begin + * and end on page boundaries. + */ + len = PAGE_ALIGN(len); + if (!len) + return -EINVAL; + + return heap->ops->allocate(heap, len, fd_flags, heap_flags); +} + +static int dma_heap_open(struct inode *inode, struct file *file) +{ + struct dma_heap *heap; + + heap = xa_load(&dma_heap_minors, iminor(inode)); + if (!heap) { + pr_err("dma_heap: minor %d unknown.\n", iminor(inode)); + return -ENODEV; + } + + /* instance data as context */ + file->private_data = heap; + nonseekable_open(inode, file); + + return 0; +} + +static long dma_heap_ioctl_allocate(struct file *file, unsigned long arg) +{ + struct dma_heap_allocation_data heap_allocation; + struct dma_heap *heap = file->private_data; + int fd; + + if (copy_from_user(&heap_allocation, (void __user *)arg, + sizeof(heap_allocation))) + return -EFAULT; + + if (heap_allocation.fd || + heap_allocation.reserved0 || + heap_allocation.reserved1) { + pr_warn_once("dma_heap: ioctl data not valid\n"); + return -EINVAL; + } + + if (heap_allocation.fd_flags & ~DMA_HEAP_VALID_FD_FLAGS) { + pr_warn_once("dma_heap: fd_flags has invalid or unsupported flags set\n"); + return -EINVAL; + } + + if (heap_allocation.heap_flags & ~DMA_HEAP_VALID_HEAP_FLAGS) { + pr_warn_once("dma_heap: heap flags has invalid or unsupported flags set\n"); + return -EINVAL; + } + + fd = dma_heap_buffer_alloc(heap, heap_allocation.len, + heap_allocation.fd_flags, + heap_allocation.heap_flags); + if (fd < 0) + return fd; + + heap_allocation.fd = fd; + + if (copy_to_user((void __user *)arg, &heap_allocation, + sizeof(heap_allocation))) { + ksys_close(fd); + return -EFAULT; + } + + return 0; +} + +static long dma_heap_ioctl(struct file *file, unsigned int cmd, + unsigned long arg) +{ + int ret = 0; + + switch (cmd) { + case DMA_HEAP_IOC_ALLOC: + ret = dma_heap_ioctl_allocate(file, arg); + break; + default: + return -ENOTTY; + } + + return ret; +} + +static const struct file_operations dma_heap_fops = { + .owner = THIS_MODULE, + .open = dma_heap_open, + .unlocked_ioctl = dma_heap_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = dma_heap_ioctl, +#endif +}; + +/** + * dma_heap_get_drvdata() - get per-subdriver data for the heap + * @heap: DMA-Heap to retrieve private data for + * + * Returns: + * The per-subdriver data for the heap. + */ +void *dma_heap_get_drvdata(struct dma_heap *heap) +{ + return heap->priv; +} + +struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info) +{ + struct dma_heap *heap, *h, *err_ret; + struct device *dev_ret; + int ret; + + if (!exp_info->name || !strcmp(exp_info->name, "")) { + pr_err("dma_heap: Cannot add heap without a name\n"); + return ERR_PTR(-EINVAL); + } + + if (!exp_info->ops || !exp_info->ops->allocate) { + pr_err("dma_heap: Cannot add heap with invalid ops struct\n"); + return ERR_PTR(-EINVAL); + } + + /* check the name is unique */ + mutex_lock(&heap_list_lock); + list_for_each_entry(h, &heap_list, list) { + if (!strcmp(h->name, exp_info->name)) { + mutex_unlock(&heap_list_lock); + pr_err("dma_heap: Already registered heap named %s\n", + exp_info->name); + return ERR_PTR(-EINVAL); + } + } + mutex_unlock(&heap_list_lock); + + heap = kzalloc(sizeof(*heap), GFP_KERNEL); + if (!heap) + return ERR_PTR(-ENOMEM); + + heap->name = exp_info->name; + heap->ops = exp_info->ops; + heap->priv = exp_info->priv; + + /* Find unused minor number */ + ret = xa_alloc(&dma_heap_minors, &heap->minor, heap, + XA_LIMIT(0, NUM_HEAP_MINORS - 1), GFP_KERNEL); + if (ret < 0) { + pr_err("dma_heap: Unable to get minor number for heap\n"); + err_ret = ERR_PTR(ret); + goto err0; + } + + /* Create device */ + heap->heap_devt = MKDEV(MAJOR(dma_heap_devt), heap->minor); + + cdev_init(&heap->heap_cdev, &dma_heap_fops); + ret = cdev_add(&heap->heap_cdev, heap->heap_devt, 1); + if (ret < 0) { + pr_err("dma_heap: Unable to add char device\n"); + err_ret = ERR_PTR(ret); + goto err1; + } + + dev_ret = device_create(dma_heap_class, + NULL, + heap->heap_devt, + NULL, + heap->name); + if (IS_ERR(dev_ret)) { + pr_err("dma_heap: Unable to create device\n"); + err_ret = ERR_CAST(dev_ret); + goto err2; + } + /* Add heap to the list */ + mutex_lock(&heap_list_lock); + list_add(&heap->list, &heap_list); + mutex_unlock(&heap_list_lock); + + return heap; + +err2: + cdev_del(&heap->heap_cdev); +err1: + xa_erase(&dma_heap_minors, heap->minor); +err0: + kfree(heap); + return err_ret; +} + +static char *dma_heap_devnode(struct device *dev, umode_t *mode) +{ + return kasprintf(GFP_KERNEL, "dma_heap/%s", dev_name(dev)); +} + +static int dma_heap_init(void) +{ + int ret; + + ret = alloc_chrdev_region(&dma_heap_devt, 0, NUM_HEAP_MINORS, DEVNAME); + if (ret) + return ret; + + dma_heap_class = class_create(THIS_MODULE, DEVNAME); + if (IS_ERR(dma_heap_class)) { + unregister_chrdev_region(dma_heap_devt, NUM_HEAP_MINORS); + return PTR_ERR(dma_heap_class); + } + dma_heap_class->devnode = dma_heap_devnode; + + return 0; +} +subsys_initcall(dma_heap_init); diff --git a/include/linux/dma-heap.h b/include/linux/dma-heap.h new file mode 100644 index 000000000000..454e354d1ffb --- /dev/null +++ b/include/linux/dma-heap.h @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * DMABUF Heaps Allocation Infrastructure + * + * Copyright (C) 2011 Google, Inc. + * Copyright (C) 2019 Linaro Ltd. + */ + +#ifndef _DMA_HEAPS_H +#define _DMA_HEAPS_H + +#include <linux/cdev.h> +#include <linux/types.h> + +struct dma_heap; + +/** + * struct dma_heap_ops - ops to operate on a given heap + * @allocate: allocate dmabuf and return fd + * + * allocate returns dmabuf fd on success, -errno on error. + */ +struct dma_heap_ops { + int (*allocate)(struct dma_heap *heap, + unsigned long len, + unsigned long fd_flags, + unsigned long heap_flags); +}; + +/** + * struct dma_heap_export_info - information needed to export a new dmabuf heap + * @name: used for debugging/device-node name + * @ops: ops struct for this heap + * @priv: heap exporter private data + * + * Information needed to export a new dmabuf heap. + */ +struct dma_heap_export_info { + const char *name; + const struct dma_heap_ops *ops; + void *priv; +}; + +/** + * dma_heap_get_drvdata() - get per-heap driver data + * @heap: DMA-Heap to retrieve private data for + * + * Returns: + * The per-heap data for the heap. + */ +void *dma_heap_get_drvdata(struct dma_heap *heap); + +/** + * dma_heap_add - adds a heap to dmabuf heaps + * @exp_info: information needed to register this heap + */ +struct dma_heap *dma_heap_add(const struct dma_heap_export_info *exp_info); + +#endif /* _DMA_HEAPS_H */ diff --git a/include/uapi/linux/dma-heap.h b/include/uapi/linux/dma-heap.h new file mode 100644 index 000000000000..6ce5cc68d238 --- /dev/null +++ b/include/uapi/linux/dma-heap.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ +/* + * DMABUF Heaps Userspace API + * + * Copyright (C) 2011 Google, Inc. + * Copyright (C) 2019 Linaro Ltd. + */ +#ifndef _UAPI_LINUX_DMABUF_POOL_H +#define _UAPI_LINUX_DMABUF_POOL_H + +#include <linux/ioctl.h> +#include <linux/types.h> + +/** + * DOC: DMABUF Heaps Userspace API + */ + +/* Valid FD_FLAGS are O_CLOEXEC, O_RDONLY, O_WRONLY, O_RDWR */ +#define DMA_HEAP_VALID_FD_FLAGS (O_CLOEXEC | O_ACCMODE) + +/* Currently no heap flags */ +#define DMA_HEAP_VALID_HEAP_FLAGS (0) + +/** + * struct dma_heap_allocation_data - metadata passed from userspace for + * allocations + * @len: size of the allocation + * @fd: will be populated with a fd which provdes the + * handle to the allocated dma-buf + * @fd_flags: file descriptor flags used when allocating + * @heap_flags: flags passed to heap + * + * Provided by userspace as an argument to the ioctl + */ +struct dma_heap_allocation_data { + __u64 len; + __u32 fd; + __u32 fd_flags; + __u64 heap_flags; + __u32 reserved0; + __u32 reserved1; +}; + +#define DMA_HEAP_IOC_MAGIC 'H' + +/** + * DOC: DMA_HEAP_IOC_ALLOC - allocate memory from pool + * + * Takes an dma_heap_allocation_data struct and returns it with the fd field + * populated with the dmabuf handle of the allocation. + */ +#define DMA_HEAP_IOC_ALLOC _IOWR(DMA_HEAP_IOC_MAGIC, 0, \ + struct dma_heap_allocation_data) + +#endif /* _UAPI_LINUX_DMABUF_POOL_H */
Add generic helper dmabuf ops for dma heaps, so we can reduce the amount of duplicative code for the exported dmabufs.
This code is an evolution of the Android ION implementation, so thanks to its original authors and maintainters: Rebecca Schultz Zavin, Colin Cross, Laura Abbott, and others!
Cc: Laura Abbott labbott@redhat.com Cc: Benjamin Gaignard benjamin.gaignard@linaro.org Cc: Sumit Semwal sumit.semwal@linaro.org Cc: Liam Mark lmark@codeaurora.org Cc: Pratik Patel pratikp@codeaurora.org Cc: Brian Starkey Brian.Starkey@arm.com Cc: Vincent Donnefort Vincent.Donnefort@arm.com Cc: Sudipto Paul Sudipto.Paul@arm.com Cc: Andrew F. Davis afd@ti.com Cc: Christoph Hellwig hch@infradead.org Cc: Chenbo Feng fengc@google.com Cc: Alistair Strachan astrachan@google.com Cc: Hridya Valsaraju hridya@google.com Cc: Hillf Danton hdanton@sina.com Cc: dri-devel@lists.freedesktop.org Reviewed-by: Benjamin Gaignard benjamin.gaignard@linaro.org Reviewed-by: Brian Starkey brian.starkey@arm.com Acked-by: Laura Abbott labbott@redhat.com Tested-by: Ayan Kumar Halder ayan.halder@arm.com Signed-off-by: John Stultz john.stultz@linaro.org --- v2: * Removed cache management performance hack that I had accidentally folded in. * Removed stats code that was in helpers * Lots of checkpatch cleanups v3: * Uninline INIT_HEAP_HELPER_BUFFER (suggested by Christoph) * Switch to WARN on buffer destroy failure (suggested by Brian) * buffer->kmap_cnt decrementing cleanup (suggested by Christoph) * Extra buffer->vaddr checking in dma_heap_dma_buf_kmap (suggested by Brian) * Switch to_helper_buffer from macro to inline function (suggested by Benjamin) * Rename kmap->vmap (folded in from Andrew) * Use vmap for vmapping - not begin_cpu_access (folded in from Andrew) * Drop kmap for now, as its optional (folded in from Andrew) * Fold dma_heap_map_user into the single caller (foled in from Andrew) * Folded in patch from Andrew to track page list per heap not sglist, which simplifies the tracking logic v4: * Moved dma-heap.h change out to previous patch v6: * Minor cleanups and typo fixes suggested by Brian v7: * Removed stray ; * Make init_heap_helper_buffer lowercase, as suggested by Christoph * Add dmabuf export helper to reduce boilerplate code v8: * Remove unused private_flags value * Condense dma_heap_buffer and heap_helper_buffer (suggested by Christoph) * Fix indentation by using shorter argument names (suggested by Christoph) * Add flush_kernel_vmap_range/invalidate_kernel_vmap_range calls (suggested by Christoph) * Checkpatch whitespace fixups v9: * Minor cleanups suggested by Brian Starkey v10: * Fix missing vmalloc.h inclusion in heap helpers (found by kbuild test robot lkp@intel.com) v12: * Add symbol exports for heaps as modules v13: * Re-remove symbol exports, per discussion with Brian, as I'll resubmit the change for review independently. --- drivers/dma-buf/Makefile | 1 + drivers/dma-buf/heaps/Makefile | 2 + drivers/dma-buf/heaps/heap-helpers.c | 268 +++++++++++++++++++++++++++ drivers/dma-buf/heaps/heap-helpers.h | 55 ++++++ 4 files changed, 326 insertions(+) create mode 100644 drivers/dma-buf/heaps/Makefile create mode 100644 drivers/dma-buf/heaps/heap-helpers.c create mode 100644 drivers/dma-buf/heaps/heap-helpers.h
diff --git a/drivers/dma-buf/Makefile b/drivers/dma-buf/Makefile index caee5eb3d351..9c190026bfab 100644 --- a/drivers/dma-buf/Makefile +++ b/drivers/dma-buf/Makefile @@ -2,6 +2,7 @@ obj-y := dma-buf.o dma-fence.o dma-fence-array.o dma-fence-chain.o \ dma-resv.o seqno-fence.o obj-$(CONFIG_DMABUF_HEAPS) += dma-heap.o +obj-$(CONFIG_DMABUF_HEAPS) += heaps/ obj-$(CONFIG_SYNC_FILE) += sync_file.o obj-$(CONFIG_SW_SYNC) += sw_sync.o sync_debug.o obj-$(CONFIG_UDMABUF) += udmabuf.o diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile new file mode 100644 index 000000000000..de49898112db --- /dev/null +++ b/drivers/dma-buf/heaps/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-y += heap-helpers.o diff --git a/drivers/dma-buf/heaps/heap-helpers.c b/drivers/dma-buf/heaps/heap-helpers.c new file mode 100644 index 000000000000..750bef4e902d --- /dev/null +++ b/drivers/dma-buf/heaps/heap-helpers.c @@ -0,0 +1,268 @@ +// SPDX-License-Identifier: GPL-2.0 +#include <linux/device.h> +#include <linux/dma-buf.h> +#include <linux/err.h> +#include <linux/highmem.h> +#include <linux/idr.h> +#include <linux/list.h> +#include <linux/slab.h> +#include <linux/uaccess.h> +#include <linux/vmalloc.h> +#include <uapi/linux/dma-heap.h> + +#include "heap-helpers.h" + +void init_heap_helper_buffer(struct heap_helper_buffer *buffer, + void (*free)(struct heap_helper_buffer *)) +{ + buffer->priv_virt = NULL; + mutex_init(&buffer->lock); + buffer->vmap_cnt = 0; + buffer->vaddr = NULL; + buffer->pagecount = 0; + buffer->pages = NULL; + INIT_LIST_HEAD(&buffer->attachments); + buffer->free = free; +} + +struct dma_buf *heap_helper_export_dmabuf(struct heap_helper_buffer *buffer, + int fd_flags) +{ + DEFINE_DMA_BUF_EXPORT_INFO(exp_info); + + exp_info.ops = &heap_helper_ops; + exp_info.size = buffer->size; + exp_info.flags = fd_flags; + exp_info.priv = buffer; + + return dma_buf_export(&exp_info); +} + +static void *dma_heap_map_kernel(struct heap_helper_buffer *buffer) +{ + void *vaddr; + + vaddr = vmap(buffer->pages, buffer->pagecount, VM_MAP, PAGE_KERNEL); + if (!vaddr) + return ERR_PTR(-ENOMEM); + + return vaddr; +} + +static void dma_heap_buffer_destroy(struct heap_helper_buffer *buffer) +{ + if (buffer->vmap_cnt > 0) { + WARN("%s: buffer still mapped in the kernel\n", __func__); + vunmap(buffer->vaddr); + } + + buffer->free(buffer); +} + +static void *dma_heap_buffer_vmap_get(struct heap_helper_buffer *buffer) +{ + void *vaddr; + + if (buffer->vmap_cnt) { + buffer->vmap_cnt++; + return buffer->vaddr; + } + vaddr = dma_heap_map_kernel(buffer); + if (IS_ERR(vaddr)) + return vaddr; + buffer->vaddr = vaddr; + buffer->vmap_cnt++; + return vaddr; +} + +static void dma_heap_buffer_vmap_put(struct heap_helper_buffer *buffer) +{ + if (!--buffer->vmap_cnt) { + vunmap(buffer->vaddr); + buffer->vaddr = NULL; + } +} + +struct dma_heaps_attachment { + struct device *dev; + struct sg_table table; + struct list_head list; +}; + +static int dma_heap_attach(struct dma_buf *dmabuf, + struct dma_buf_attachment *attachment) +{ + struct dma_heaps_attachment *a; + struct heap_helper_buffer *buffer = dmabuf->priv; + int ret; + + a = kzalloc(sizeof(*a), GFP_KERNEL); + if (!a) + return -ENOMEM; + + ret = sg_alloc_table_from_pages(&a->table, buffer->pages, + buffer->pagecount, 0, + buffer->pagecount << PAGE_SHIFT, + GFP_KERNEL); + if (ret) { + kfree(a); + return ret; + } + + a->dev = attachment->dev; + INIT_LIST_HEAD(&a->list); + + attachment->priv = a; + + mutex_lock(&buffer->lock); + list_add(&a->list, &buffer->attachments); + mutex_unlock(&buffer->lock); + + return 0; +} + +static void dma_heap_detach(struct dma_buf *dmabuf, + struct dma_buf_attachment *attachment) +{ + struct dma_heaps_attachment *a = attachment->priv; + struct heap_helper_buffer *buffer = dmabuf->priv; + + mutex_lock(&buffer->lock); + list_del(&a->list); + mutex_unlock(&buffer->lock); + + sg_free_table(&a->table); + kfree(a); +} + +static +struct sg_table *dma_heap_map_dma_buf(struct dma_buf_attachment *attachment, + enum dma_data_direction direction) +{ + struct dma_heaps_attachment *a = attachment->priv; + struct sg_table *table; + + table = &a->table; + + if (!dma_map_sg(attachment->dev, table->sgl, table->nents, + direction)) + table = ERR_PTR(-ENOMEM); + return table; +} + +static void dma_heap_unmap_dma_buf(struct dma_buf_attachment *attachment, + struct sg_table *table, + enum dma_data_direction direction) +{ + dma_unmap_sg(attachment->dev, table->sgl, table->nents, direction); +} + +static vm_fault_t dma_heap_vm_fault(struct vm_fault *vmf) +{ + struct vm_area_struct *vma = vmf->vma; + struct heap_helper_buffer *buffer = vma->vm_private_data; + + vmf->page = buffer->pages[vmf->pgoff]; + get_page(vmf->page); + + return 0; +} + +static const struct vm_operations_struct dma_heap_vm_ops = { + .fault = dma_heap_vm_fault, +}; + +static int dma_heap_mmap(struct dma_buf *dmabuf, struct vm_area_struct *vma) +{ + struct heap_helper_buffer *buffer = dmabuf->priv; + + if ((vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) == 0) + return -EINVAL; + + vma->vm_ops = &dma_heap_vm_ops; + vma->vm_private_data = buffer; + + return 0; +} + +static void dma_heap_dma_buf_release(struct dma_buf *dmabuf) +{ + struct heap_helper_buffer *buffer = dmabuf->priv; + + dma_heap_buffer_destroy(buffer); +} + +static int dma_heap_dma_buf_begin_cpu_access(struct dma_buf *dmabuf, + enum dma_data_direction direction) +{ + struct heap_helper_buffer *buffer = dmabuf->priv; + struct dma_heaps_attachment *a; + int ret = 0; + + mutex_lock(&buffer->lock); + + if (buffer->vmap_cnt) + invalidate_kernel_vmap_range(buffer->vaddr, buffer->size); + + list_for_each_entry(a, &buffer->attachments, list) { + dma_sync_sg_for_cpu(a->dev, a->table.sgl, a->table.nents, + direction); + } + mutex_unlock(&buffer->lock); + + return ret; +} + +static int dma_heap_dma_buf_end_cpu_access(struct dma_buf *dmabuf, + enum dma_data_direction direction) +{ + struct heap_helper_buffer *buffer = dmabuf->priv; + struct dma_heaps_attachment *a; + + mutex_lock(&buffer->lock); + + if (buffer->vmap_cnt) + flush_kernel_vmap_range(buffer->vaddr, buffer->size); + + list_for_each_entry(a, &buffer->attachments, list) { + dma_sync_sg_for_device(a->dev, a->table.sgl, a->table.nents, + direction); + } + mutex_unlock(&buffer->lock); + + return 0; +} + +static void *dma_heap_dma_buf_vmap(struct dma_buf *dmabuf) +{ + struct heap_helper_buffer *buffer = dmabuf->priv; + void *vaddr; + + mutex_lock(&buffer->lock); + vaddr = dma_heap_buffer_vmap_get(buffer); + mutex_unlock(&buffer->lock); + + return vaddr; +} + +static void dma_heap_dma_buf_vunmap(struct dma_buf *dmabuf, void *vaddr) +{ + struct heap_helper_buffer *buffer = dmabuf->priv; + + mutex_lock(&buffer->lock); + dma_heap_buffer_vmap_put(buffer); + mutex_unlock(&buffer->lock); +} + +const struct dma_buf_ops heap_helper_ops = { + .map_dma_buf = dma_heap_map_dma_buf, + .unmap_dma_buf = dma_heap_unmap_dma_buf, + .mmap = dma_heap_mmap, + .release = dma_heap_dma_buf_release, + .attach = dma_heap_attach, + .detach = dma_heap_detach, + .begin_cpu_access = dma_heap_dma_buf_begin_cpu_access, + .end_cpu_access = dma_heap_dma_buf_end_cpu_access, + .vmap = dma_heap_dma_buf_vmap, + .vunmap = dma_heap_dma_buf_vunmap, +}; diff --git a/drivers/dma-buf/heaps/heap-helpers.h b/drivers/dma-buf/heaps/heap-helpers.h new file mode 100644 index 000000000000..911c931f7f06 --- /dev/null +++ b/drivers/dma-buf/heaps/heap-helpers.h @@ -0,0 +1,55 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * DMABUF Heaps helper code + * + * Copyright (C) 2011 Google, Inc. + * Copyright (C) 2019 Linaro Ltd. + */ + +#ifndef _HEAP_HELPERS_H +#define _HEAP_HELPERS_H + +#include <linux/dma-heap.h> +#include <linux/list.h> + +/** + * struct heap_helper_buffer - helper buffer metadata + * @heap: back pointer to the heap the buffer came from + * @dmabuf: backing dma-buf for this buffer + * @size: size of the buffer + * @flags: buffer specific flags + * @priv_virt pointer to heap specific private value + * @lock mutext to protect the data in this structure + * @vmap_cnt count of vmap references on the buffer + * @vaddr vmap'ed virtual address + * @pagecount number of pages in the buffer + * @pages list of page pointers + * @attachments list of device attachments + * + * @free heap callback to free the buffer + */ +struct heap_helper_buffer { + struct dma_heap *heap; + struct dma_buf *dmabuf; + size_t size; + unsigned long flags; + + void *priv_virt; + struct mutex lock; + int vmap_cnt; + void *vaddr; + pgoff_t pagecount; + struct page **pages; + struct list_head attachments; + + void (*free)(struct heap_helper_buffer *buffer); +}; + +void init_heap_helper_buffer(struct heap_helper_buffer *buffer, + void (*free)(struct heap_helper_buffer *)); + +struct dma_buf *heap_helper_export_dmabuf(struct heap_helper_buffer *buffer, + int fd_flags); + +extern const struct dma_buf_ops heap_helper_ops; +#endif /* _HEAP_HELPERS_H */
This patch adds system heap to the dma-buf heaps framework.
This allows applications to get a page-allocator backed dma-buf for non-contiguous memory.
This code is an evolution of the Android ION implementation, so thanks to its original authors and maintainters: Rebecca Schultz Zavin, Colin Cross, Laura Abbott, and others!
Cc: Laura Abbott labbott@redhat.com Cc: Benjamin Gaignard benjamin.gaignard@linaro.org Cc: Sumit Semwal sumit.semwal@linaro.org Cc: Liam Mark lmark@codeaurora.org Cc: Pratik Patel pratikp@codeaurora.org Cc: Brian Starkey Brian.Starkey@arm.com Cc: Vincent Donnefort Vincent.Donnefort@arm.com Cc: Sudipto Paul Sudipto.Paul@arm.com Cc: Andrew F. Davis afd@ti.com Cc: Christoph Hellwig hch@infradead.org Cc: Chenbo Feng fengc@google.com Cc: Alistair Strachan astrachan@google.com Cc: Hridya Valsaraju hridya@google.com Cc: Hillf Danton hdanton@sina.com Cc: dri-devel@lists.freedesktop.org Reviewed-by: Benjamin Gaignard benjamin.gaignard@linaro.org Reviewed-by: Brian Starkey brian.starkey@arm.com Acked-by: Laura Abbott labbott@redhat.com Tested-by: Ayan Kumar Halder ayan.halder@arm.com Signed-off-by: John Stultz john.stultz@linaro.org --- v2: * Switch allocate to return dmabuf fd * Simplify init code * Checkpatch fixups * Droped dead system-contig code v3: * Whitespace fixups from Benjamin * Make sure we're zeroing the allocated pages (from Liam) * Use PAGE_ALIGN() consistently (suggested by Brian) * Fold in new registration style from Andrew * Avoid needless dynamic allocation of sys_heap (suggested by Christoph) * Minor cleanups * Folded in changes from Andrew to use simplified page list from the heap helpers v4: * Optimization to allocate pages in chunks, similar to old pagepool code * Use fd_flags when creating dmabuf fd (Suggested by Benjamin) v5: * Back out large order page allocations (was leaking memory, as the page array didn't properly track order size) v6: * Minor whitespace change suggested by Brian * Remove unused variable v7: * Use newly lower-cased init_heap_helper_buffer helper * Add system heap DOS avoidance suggested by Laura from ION code * Use new dmabuf export helper v8: * Make struct dma_heap_ops consts (suggested by Christoph) * Get rid of needless struct system_heap (suggested by Christoph) * Condense dma_heap_buffer and heap_helper_buffer (suggested by Christoph) * Add forgotten include file to fix build issue on x86 v12: * Minor tweaks to prep loading heap from module --- drivers/dma-buf/Kconfig | 2 + drivers/dma-buf/heaps/Kconfig | 6 ++ drivers/dma-buf/heaps/Makefile | 1 + drivers/dma-buf/heaps/system_heap.c | 124 ++++++++++++++++++++++++++++ 4 files changed, 133 insertions(+) create mode 100644 drivers/dma-buf/heaps/Kconfig create mode 100644 drivers/dma-buf/heaps/system_heap.c
diff --git a/drivers/dma-buf/Kconfig b/drivers/dma-buf/Kconfig index bffa58fc3e6e..0613bb7770f5 100644 --- a/drivers/dma-buf/Kconfig +++ b/drivers/dma-buf/Kconfig @@ -53,4 +53,6 @@ menuconfig DMABUF_HEAPS allows userspace to allocate dma-bufs that can be shared between drivers.
+source "drivers/dma-buf/heaps/Kconfig" + endmenu diff --git a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig new file mode 100644 index 000000000000..205052744169 --- /dev/null +++ b/drivers/dma-buf/heaps/Kconfig @@ -0,0 +1,6 @@ +config DMABUF_HEAPS_SYSTEM + bool "DMA-BUF System Heap" + depends on DMABUF_HEAPS + help + Choose this option to enable the system dmabuf heap. The system heap + is backed by pages from the buddy allocator. If in doubt, say Y. diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile index de49898112db..d1808eca2581 100644 --- a/drivers/dma-buf/heaps/Makefile +++ b/drivers/dma-buf/heaps/Makefile @@ -1,2 +1,3 @@ # SPDX-License-Identifier: GPL-2.0 obj-y += heap-helpers.o +obj-$(CONFIG_DMABUF_HEAPS_SYSTEM) += system_heap.o diff --git a/drivers/dma-buf/heaps/system_heap.c b/drivers/dma-buf/heaps/system_heap.c new file mode 100644 index 000000000000..455782efbb32 --- /dev/null +++ b/drivers/dma-buf/heaps/system_heap.c @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * DMABUF System heap exporter + * + * Copyright (C) 2011 Google, Inc. + * Copyright (C) 2019 Linaro Ltd. + */ + +#include <linux/dma-buf.h> +#include <linux/dma-mapping.h> +#include <linux/dma-heap.h> +#include <linux/err.h> +#include <linux/highmem.h> +#include <linux/mm.h> +#include <linux/module.h> +#include <linux/scatterlist.h> +#include <linux/slab.h> +#include <linux/sched/signal.h> +#include <asm/page.h> + +#include "heap-helpers.h" + +struct dma_heap *sys_heap; + +static void system_heap_free(struct heap_helper_buffer *buffer) +{ + pgoff_t pg; + + for (pg = 0; pg < buffer->pagecount; pg++) + __free_page(buffer->pages[pg]); + kfree(buffer->pages); + kfree(buffer); +} + +static int system_heap_allocate(struct dma_heap *heap, + unsigned long len, + unsigned long fd_flags, + unsigned long heap_flags) +{ + struct heap_helper_buffer *helper_buffer; + struct dma_buf *dmabuf; + int ret = -ENOMEM; + pgoff_t pg; + + helper_buffer = kzalloc(sizeof(*helper_buffer), GFP_KERNEL); + if (!helper_buffer) + return -ENOMEM; + + init_heap_helper_buffer(helper_buffer, system_heap_free); + helper_buffer->flags = heap_flags; + helper_buffer->heap = heap; + helper_buffer->size = len; + + helper_buffer->pagecount = len / PAGE_SIZE; + helper_buffer->pages = kmalloc_array(helper_buffer->pagecount, + sizeof(*helper_buffer->pages), + GFP_KERNEL); + if (!helper_buffer->pages) { + ret = -ENOMEM; + goto err0; + } + + for (pg = 0; pg < helper_buffer->pagecount; pg++) { + /* + * Avoid trying to allocate memory if the process + * has been killed by by SIGKILL + */ + if (fatal_signal_pending(current)) + goto err1; + + helper_buffer->pages[pg] = alloc_page(GFP_KERNEL | __GFP_ZERO); + if (!helper_buffer->pages[pg]) + goto err1; + } + + /* create the dmabuf */ + dmabuf = heap_helper_export_dmabuf(helper_buffer, fd_flags); + if (IS_ERR(dmabuf)) { + ret = PTR_ERR(dmabuf); + goto err1; + } + + helper_buffer->dmabuf = dmabuf; + + ret = dma_buf_fd(dmabuf, fd_flags); + if (ret < 0) { + dma_buf_put(dmabuf); + /* just return, as put will call release and that will free */ + return ret; + } + + return ret; + +err1: + while (pg > 0) + __free_page(helper_buffer->pages[--pg]); + kfree(helper_buffer->pages); +err0: + kfree(helper_buffer); + + return -ENOMEM; +} + +static const struct dma_heap_ops system_heap_ops = { + .allocate = system_heap_allocate, +}; + +static int system_heap_create(void) +{ + struct dma_heap_export_info exp_info; + int ret = 0; + + exp_info.name = "system_heap"; + exp_info.ops = &system_heap_ops; + exp_info.priv = NULL; + + sys_heap = dma_heap_add(&exp_info); + if (IS_ERR(sys_heap)) + ret = PTR_ERR(sys_heap); + + return ret; +} +module_init(system_heap_create); +MODULE_LICENSE("GPL v2");
This adds a CMA heap, which allows userspace to allocate a dma-buf of contiguous memory out of a CMA region.
This code is an evolution of the Android ION implementation, so thanks to its original author and maintainters: Benjamin Gaignard, Laura Abbott, and others!
NOTE: This patch only adds the default CMA heap. We will enable selectively adding other CMA memory regions to the dmabuf heaps interface with a later patch (which requires a dt binding)
Cc: Laura Abbott labbott@redhat.com Cc: Benjamin Gaignard benjamin.gaignard@linaro.org Cc: Sumit Semwal sumit.semwal@linaro.org Cc: Liam Mark lmark@codeaurora.org Cc: Pratik Patel pratikp@codeaurora.org Cc: Brian Starkey Brian.Starkey@arm.com Cc: Vincent Donnefort Vincent.Donnefort@arm.com Cc: Sudipto Paul Sudipto.Paul@arm.com Cc: Andrew F. Davis afd@ti.com Cc: Christoph Hellwig hch@infradead.org Cc: Chenbo Feng fengc@google.com Cc: Alistair Strachan astrachan@google.com Cc: Hridya Valsaraju hridya@google.com Cc: Hillf Danton hdanton@sina.com Cc: dri-devel@lists.freedesktop.org Reviewed-by: Benjamin Gaignard benjamin.gaignard@linaro.org Reviewed-by: Brian Starkey brian.starkey@arm.com Acked-by: Laura Abbott labbott@redhat.com Tested-by: Ayan Kumar Halder ayan.halder@arm.com Signed-off-by: John Stultz john.stultz@linaro.org --- v2: * Switch allocate to return dmabuf fd * Simplify init code * Checkpatch fixups v3: * Switch to inline function for to_cma_heap() * Minor cleanups suggested by Brian * Fold in new registration style from Andrew * Folded in changes from Andrew to use simplified page list from the heap helpers v4: * Use the fd_flags when creating dmabuf fd (Suggested by Benjamin) * Use precalculated pagecount (Suggested by Andrew) v6: * Changed variable names to improve clarity, as suggested by Brian v7: * Use newly lower-cased init_heap_helper_buffer helper * Use new dmabuf export helper v8: * Make struct dma_heap_ops const (Suggested by Christoph) * Condense dma_heap_buffer and heap_helper_buffer (suggested by Christoph) * Checkpatch whitespace fixups v9: * Removing needless check noted by Brian Starkey * Rename dma_heap_get_data->dma_heap_get_drvdata suggested by Hilf Danton * Check signals after clearing memory pages to avoid doing needless work if the task is killed as suggested by Hilf v12: * Rework to only add the default CMA heap --- drivers/dma-buf/heaps/Kconfig | 8 ++ drivers/dma-buf/heaps/Makefile | 1 + drivers/dma-buf/heaps/cma_heap.c | 178 +++++++++++++++++++++++++++++++ 3 files changed, 187 insertions(+) create mode 100644 drivers/dma-buf/heaps/cma_heap.c
diff --git a/drivers/dma-buf/heaps/Kconfig b/drivers/dma-buf/heaps/Kconfig index 205052744169..a5eef06c4226 100644 --- a/drivers/dma-buf/heaps/Kconfig +++ b/drivers/dma-buf/heaps/Kconfig @@ -4,3 +4,11 @@ config DMABUF_HEAPS_SYSTEM help Choose this option to enable the system dmabuf heap. The system heap is backed by pages from the buddy allocator. If in doubt, say Y. + +config DMABUF_HEAPS_CMA + bool "DMA-BUF CMA Heap" + depends on DMABUF_HEAPS && DMA_CMA + help + Choose this option to enable dma-buf CMA heap. This heap is backed + by the Contiguous Memory Allocator (CMA). If your system has these + regions, you should say Y here. diff --git a/drivers/dma-buf/heaps/Makefile b/drivers/dma-buf/heaps/Makefile index d1808eca2581..6e54cdec3da0 100644 --- a/drivers/dma-buf/heaps/Makefile +++ b/drivers/dma-buf/heaps/Makefile @@ -1,3 +1,4 @@ # SPDX-License-Identifier: GPL-2.0 obj-y += heap-helpers.o obj-$(CONFIG_DMABUF_HEAPS_SYSTEM) += system_heap.o +obj-$(CONFIG_DMABUF_HEAPS_CMA) += cma_heap.o diff --git a/drivers/dma-buf/heaps/cma_heap.c b/drivers/dma-buf/heaps/cma_heap.c new file mode 100644 index 000000000000..064926b5d735 --- /dev/null +++ b/drivers/dma-buf/heaps/cma_heap.c @@ -0,0 +1,178 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * DMABUF CMA heap exporter + * + * Copyright (C) 2012, 2019 Linaro Ltd. + * Author: benjamin.gaignard@linaro.org for ST-Ericsson. + */ + +#include <linux/cma.h> +#include <linux/device.h> +#include <linux/dma-buf.h> +#include <linux/dma-heap.h> +#include <linux/dma-contiguous.h> +#include <linux/err.h> +#include <linux/errno.h> +#include <linux/highmem.h> +#include <linux/module.h> +#include <linux/slab.h> +#include <linux/scatterlist.h> +#include <linux/sched/signal.h> + +#include "heap-helpers.h" + +struct cma_heap { + struct dma_heap *heap; + struct cma *cma; +}; + +static void cma_heap_free(struct heap_helper_buffer *buffer) +{ + struct cma_heap *cma_heap = dma_heap_get_drvdata(buffer->heap); + unsigned long nr_pages = buffer->pagecount; + struct page *cma_pages = buffer->priv_virt; + + /* free page list */ + kfree(buffer->pages); + /* release memory */ + cma_release(cma_heap->cma, cma_pages, nr_pages); + kfree(buffer); +} + +/* dmabuf heap CMA operations functions */ +static int cma_heap_allocate(struct dma_heap *heap, + unsigned long len, + unsigned long fd_flags, + unsigned long heap_flags) +{ + struct cma_heap *cma_heap = dma_heap_get_drvdata(heap); + struct heap_helper_buffer *helper_buffer; + struct page *cma_pages; + size_t size = PAGE_ALIGN(len); + unsigned long nr_pages = size >> PAGE_SHIFT; + unsigned long align = get_order(size); + struct dma_buf *dmabuf; + int ret = -ENOMEM; + pgoff_t pg; + + if (align > CONFIG_CMA_ALIGNMENT) + align = CONFIG_CMA_ALIGNMENT; + + helper_buffer = kzalloc(sizeof(*helper_buffer), GFP_KERNEL); + if (!helper_buffer) + return -ENOMEM; + + init_heap_helper_buffer(helper_buffer, cma_heap_free); + helper_buffer->flags = heap_flags; + helper_buffer->heap = heap; + helper_buffer->size = len; + + cma_pages = cma_alloc(cma_heap->cma, nr_pages, align, false); + if (!cma_pages) + goto free_buf; + + if (PageHighMem(cma_pages)) { + unsigned long nr_clear_pages = nr_pages; + struct page *page = cma_pages; + + while (nr_clear_pages > 0) { + void *vaddr = kmap_atomic(page); + + memset(vaddr, 0, PAGE_SIZE); + kunmap_atomic(vaddr); + /* + * Avoid wasting time zeroing memory if the process + * has been killed by by SIGKILL + */ + if (fatal_signal_pending(current)) + goto free_cma; + + page++; + nr_clear_pages--; + } + } else { + memset(page_address(cma_pages), 0, size); + } + + helper_buffer->pagecount = nr_pages; + helper_buffer->pages = kmalloc_array(helper_buffer->pagecount, + sizeof(*helper_buffer->pages), + GFP_KERNEL); + if (!helper_buffer->pages) { + ret = -ENOMEM; + goto free_cma; + } + + for (pg = 0; pg < helper_buffer->pagecount; pg++) + helper_buffer->pages[pg] = &cma_pages[pg]; + + /* create the dmabuf */ + dmabuf = heap_helper_export_dmabuf(helper_buffer, fd_flags); + if (IS_ERR(dmabuf)) { + ret = PTR_ERR(dmabuf); + goto free_pages; + } + + helper_buffer->dmabuf = dmabuf; + helper_buffer->priv_virt = cma_pages; + + ret = dma_buf_fd(dmabuf, fd_flags); + if (ret < 0) { + dma_buf_put(dmabuf); + /* just return, as put will call release and that will free */ + return ret; + } + + return ret; + +free_pages: + kfree(helper_buffer->pages); +free_cma: + cma_release(cma_heap->cma, cma_pages, nr_pages); +free_buf: + kfree(helper_buffer); + return ret; +} + +static const struct dma_heap_ops cma_heap_ops = { + .allocate = cma_heap_allocate, +}; + +static int __add_cma_heap(struct cma *cma, void *data) +{ + struct cma_heap *cma_heap; + struct dma_heap_export_info exp_info; + + cma_heap = kzalloc(sizeof(*cma_heap), GFP_KERNEL); + if (!cma_heap) + return -ENOMEM; + cma_heap->cma = cma; + + exp_info.name = cma_get_name(cma); + exp_info.ops = &cma_heap_ops; + exp_info.priv = cma_heap; + + cma_heap->heap = dma_heap_add(&exp_info); + if (IS_ERR(cma_heap->heap)) { + int ret = PTR_ERR(cma_heap->heap); + + kfree(cma_heap); + return ret; + } + + return 0; +} + +static int add_default_cma_heap(void) +{ + struct cma *default_cma = dev_get_cma_area(NULL); + int ret = 0; + + if (default_cma) + ret = __add_cma_heap(default_cma, NULL); + + return ret; +} +module_init(add_default_cma_heap); +MODULE_DESCRIPTION("DMA-BUF CMA Heap"); +MODULE_LICENSE("GPL v2");
Add very trivial allocation and import test for dma-heaps, utilizing the vgem driver as a test importer.
A good chunk of this code taken from: tools/testing/selftests/android/ion/ionmap_test.c Originally by Laura Abbott labbott@redhat.com
Cc: Benjamin Gaignard benjamin.gaignard@linaro.org Cc: Sumit Semwal sumit.semwal@linaro.org Cc: Liam Mark lmark@codeaurora.org Cc: Pratik Patel pratikp@codeaurora.org Cc: Brian Starkey Brian.Starkey@arm.com Cc: Vincent Donnefort Vincent.Donnefort@arm.com Cc: Sudipto Paul Sudipto.Paul@arm.com Cc: Andrew F. Davis afd@ti.com Cc: Christoph Hellwig hch@infradead.org Cc: Chenbo Feng fengc@google.com Cc: Alistair Strachan astrachan@google.com Cc: Hridya Valsaraju hridya@google.com Cc: Hillf Danton hdanton@sina.com Cc: dri-devel@lists.freedesktop.org Reviewed-by: Benjamin Gaignard benjamin.gaignard@linaro.org Reviewed-by: Brian Starkey brian.starkey@arm.com Acked-by: Laura Abbott labbott@redhat.com Tested-by: Ayan Kumar Halder ayan.halder@arm.com Signed-off-by: John Stultz john.stultz@linaro.org --- v2: * Switched to use reworked dma-heap apis v3: * Add simple mmap * Utilize dma-buf testdev to test importing v4: * Rework to use vgem * Pass in fd_flags to match interface changes * Skip . and .. dirs v6: * Number of style/cleanups suggested by Brian v7: * Whitespace fixup for checkpatch v8: * More checkpatch whitespace fixups v9: * Better handling error returns out to main, suggested by Brian Starkey * Switch to using snprintf, suggested by Brian --- tools/testing/selftests/dmabuf-heaps/Makefile | 9 + .../selftests/dmabuf-heaps/dmabuf-heap.c | 238 ++++++++++++++++++ 2 files changed, 247 insertions(+) create mode 100644 tools/testing/selftests/dmabuf-heaps/Makefile create mode 100644 tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c
diff --git a/tools/testing/selftests/dmabuf-heaps/Makefile b/tools/testing/selftests/dmabuf-heaps/Makefile new file mode 100644 index 000000000000..8c4c36e2972d --- /dev/null +++ b/tools/testing/selftests/dmabuf-heaps/Makefile @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: GPL-2.0 +CFLAGS += -static -O3 -Wl,-no-as-needed -Wall +#LDLIBS += -lrt -lpthread -lm + +# these are all "safe" tests that don't modify +# system time or require escalated privileges +TEST_GEN_PROGS = dmabuf-heap + +include ../lib.mk diff --git a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c new file mode 100644 index 000000000000..b36dd9f35c19 --- /dev/null +++ b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c @@ -0,0 +1,238 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <dirent.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <stdint.h> +#include <string.h> +#include <unistd.h> +#include <sys/ioctl.h> +#include <sys/mman.h> +#include <sys/types.h> + +#include <linux/dma-buf.h> +#include <drm/drm.h> + +#include "../../../../include/uapi/linux/dma-heap.h" + +#define DEVPATH "/dev/dma_heap" + +static int check_vgem(int fd) +{ + drm_version_t version = { 0 }; + char name[5]; + int ret; + + version.name_len = 4; + version.name = name; + + ret = ioctl(fd, DRM_IOCTL_VERSION, &version); + if (ret) + return 0; + + return !strcmp(name, "vgem"); +} + +static int open_vgem(void) +{ + int i, fd; + const char *drmstr = "/dev/dri/card"; + + fd = -1; + for (i = 0; i < 16; i++) { + char name[80]; + + snprintf(name, 80, "%s%u", drmstr, i); + + fd = open(name, O_RDWR); + if (fd < 0) + continue; + + if (!check_vgem(fd)) { + close(fd); + fd = -1; + continue; + } else { + break; + } + } + return fd; +} + +static int import_vgem_fd(int vgem_fd, int dma_buf_fd, uint32_t *handle) +{ + struct drm_prime_handle import_handle = { + .fd = dma_buf_fd, + .flags = 0, + .handle = 0, + }; + int ret; + + ret = ioctl(vgem_fd, DRM_IOCTL_PRIME_FD_TO_HANDLE, &import_handle); + if (ret == 0) + *handle = import_handle.handle; + return ret; +} + +static void close_handle(int vgem_fd, uint32_t handle) +{ + struct drm_gem_close close = { + .handle = handle, + }; + + ioctl(vgem_fd, DRM_IOCTL_GEM_CLOSE, &close); +} + +static int dmabuf_heap_open(char *name) +{ + int ret, fd; + char buf[256]; + + ret = snprintf(buf, 256, "%s/%s", DEVPATH, name); + if (ret < 0) { + printf("snprintf failed!\n"); + return ret; + } + + fd = open(buf, O_RDWR); + if (fd < 0) + printf("open %s failed!\n", buf); + return fd; +} + +static int dmabuf_heap_alloc(int fd, size_t len, unsigned int flags, + int *dmabuf_fd) +{ + struct dma_heap_allocation_data data = { + .len = len, + .fd_flags = O_RDWR | O_CLOEXEC, + .heap_flags = flags, + }; + int ret; + + if (!dmabuf_fd) + return -EINVAL; + + ret = ioctl(fd, DMA_HEAP_IOC_ALLOC, &data); + if (ret < 0) + return ret; + *dmabuf_fd = (int)data.fd; + return ret; +} + +static void dmabuf_sync(int fd, int start_stop) +{ + struct dma_buf_sync sync = { + .flags = start_stop | DMA_BUF_SYNC_RW, + }; + int ret; + + ret = ioctl(fd, DMA_BUF_IOCTL_SYNC, &sync); + if (ret) + printf("sync failed %d\n", errno); +} + +#define ONE_MEG (1024 * 1024) + +static int do_test(char *heap_name) +{ + int heap_fd = -1, dmabuf_fd = -1, importer_fd = -1; + uint32_t handle = 0; + void *p = NULL; + int ret; + + printf("Testing heap: %s\n", heap_name); + + heap_fd = dmabuf_heap_open(heap_name); + if (heap_fd < 0) + return; + + printf("Allocating 1 MEG\n"); + ret = dmabuf_heap_alloc(heap_fd, ONE_MEG, 0, &dmabuf_fd); + if (ret) { + printf("Allocation Failed!\n"); + ret = -1; + goto out; + } + /* mmap and write a simple pattern */ + p = mmap(NULL, + ONE_MEG, + PROT_READ | PROT_WRITE, + MAP_SHARED, + dmabuf_fd, + 0); + if (p == MAP_FAILED) { + printf("mmap() failed: %m\n"); + ret = -1; + goto out; + } + printf("mmap passed\n"); + + dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_START); + memset(p, 1, ONE_MEG / 2); + memset((char *)p + ONE_MEG / 2, 0, ONE_MEG / 2); + dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_END); + + importer_fd = open_vgem(); + if (importer_fd < 0) { + ret = importer_fd; + printf("Failed to open vgem\n"); + goto out; + } + + ret = import_vgem_fd(importer_fd, dmabuf_fd, &handle); + if (ret < 0) { + printf("Failed to import buffer\n"); + goto out; + } + printf("import passed\n"); + + dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_START); + memset(p, 0xff, ONE_MEG); + dmabuf_sync(dmabuf_fd, DMA_BUF_SYNC_END); + printf("syncs passed\n"); + + close_handle(importer_fd, handle); + ret = 0; + +out: + if (p) + munmap(p, ONE_MEG); + if (importer_fd >= 0) + close(importer_fd); + if (dmabuf_fd >= 0) + close(dmabuf_fd); + if (heap_fd >= 0) + close(heap_fd); + + return ret; +} + +int main(void) +{ + DIR *d; + struct dirent *dir; + int ret = -1; + + d = opendir(DEVPATH); + if (!d) { + printf("No %s directory?\n", DEVPATH); + return -1; + } + + while ((dir = readdir(d)) != NULL) { + if (!strncmp(dir->d_name, ".", 2)) + continue; + if (!strncmp(dir->d_name, "..", 3)) + continue; + + ret = do_test(dir->d_name); + if (ret) + break; + } + closedir(d); + + return ret; +}
FYI, we noticed the following commit (built with gcc-7):
commit: 475bfb4b00bc0f91400ac501f7edf16b595cd61b ("[PATCH v13 5/5] kselftests: Add dma-heap test") url: https://github.com/0day-ci/linux/commits/John-Stultz/DMA-BUF-Heaps-destaging...
in testcase: kernel_selftests with following parameters:
group: kselftests-01
test-description: The kernel contains a set of "self tests" under the tools/testing/selftests/ directory. These are intended to be small unit tests to exercise individual code paths in the kernel. test-url: https://www.kernel.org/doc/Documentation/kselftest.txt
on test machine: qemu-system-x86_64 -enable-kvm -cpu SandyBridge -smp 2 -m 8G
caused below changes (please refer to attached dmesg/kmsg for entire log/backtrace):
If you fix the issue, kindly add following tag Reported-by: kernel test robot oliver.sang@intel.com
KERNEL SELFTESTS: linux_headers_dir is /usr/src/linux-headers-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b 2019-10-25 16:32:04 make run_tests -C capabilities make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/capabilities' gcc -O2 -g -std=gnu99 -Wall test_execve.c -lcap-ng -lrt -ldl -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/capabilities/test_execve gcc -O2 -g -std=gnu99 -Wall validate_cap.c -lcap-ng -lrt -ldl -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/capabilities/validate_cap TAP version 13 1..1 # selftests: capabilities: test_execve # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # TAP version 13 # 1..12 # # [RUN] +++ Tests with uid == 0 +++ # # [NOTE] Using global UIDs for tests # # [RUN] Root => ep # ok 1 Passed # # Check cap_ambient manipulation rules # ok 2 PR_CAP_AMBIENT_RAISE failed on non-inheritable cap # ok 3 PR_CAP_AMBIENT_RAISE failed on non-permitted cap # ok 4 PR_CAP_AMBIENT_RAISE worked # ok 5 Basic manipulation appears to work # # [RUN] Root +i => eip # ok 6 Passed # # [RUN] UID 0 +ia => eipa # ok 7 Passed # # [RUN] Root +ia, suidroot => eipa # ok 8 Passed # # [RUN] Root +ia, suidnonroot => ip # ok 9 Passed # # [RUN] Root +ia, sgidroot => eipa # ok 10 Passed # ok 11 Passed # # [RUN] Root +ia, sgidnonroot => eip # ok 12 Passed # # Pass 12 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # validate_cap:: Capabilities after execve were correct # # ================================================== # TAP version 13 # 1..9 # # [RUN] +++ Tests with uid != 0 +++ # # [NOTE] Using global UIDs for tests # # [RUN] Non-root => no caps # ok 1 Passed # # Check cap_ambient manipulation rules # ok 2 PR_CAP_AMBIENT_RAISE failed on non-inheritable cap # ok 3 PR_CAP_AMBIENT_RAISE failed on non-permitted cap # ok 4 PR_CAP_AMBIENT_RAISE worked # ok 5 Basic manipulation appears to work # # [RUN] Non-root +i => i # ok 6 Passed # # [RUN] UID 1 +ia => eipa # ok 7 Passed # # [RUN] Non-root +ia, sgidnonroot => i # ok 8 Passed # ok 9 Passed # # Pass 9 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # # ================================================== ok 1 selftests: capabilities: test_execve make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/capabilities' ignored_by_lkp cgroup test 2019-10-25 16:32:05 make run_tests -C cpu-hotplug make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/cpu-hotplug' TAP version 13 1..1 # selftests: cpu-hotplug: cpu-on-off-test.sh # pid 1512's current affinity mask: 3 # pid 1512's new affinity mask: 1 # CPU online/offline summary: # present_cpus = 0-1 present_max = 1 # Cpus in online state: 0-1 # Cpus in offline state: 0 # Limited scope test: one hotplug cpu # (leaves cpu in the original state): # online to offline to online: cpu 1 ok 1 selftests: cpu-hotplug: cpu-on-off-test.sh make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/cpu-hotplug' 2019-10-25 16:32:05 make run_tests -C cpufreq make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/cpufreq' TAP version 13 1..1 # selftests: cpufreq: main.sh # pid 1579's current affinity mask: 3 # pid 1579's new affinity mask: 1 not ok 1 selftests: cpufreq: main.sh # exit=2 make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/cpufreq' dmabuf-heaps test: not in Makefile 2019-10-25 16:32:06 make TARGETS=dmabuf-heaps make --no-builtin-rules ARCH=x86 -C ../../.. headers_install make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' HOSTCC scripts/basic/fixdep HOSTCC scripts/unifdef WRAP arch/x86/include/generated/uapi/asm/bpf_perf_event.h WRAP arch/x86/include/generated/uapi/asm/errno.h WRAP arch/x86/include/generated/uapi/asm/fcntl.h WRAP arch/x86/include/generated/uapi/asm/ioctl.h WRAP arch/x86/include/generated/uapi/asm/ioctls.h WRAP arch/x86/include/generated/uapi/asm/ipcbuf.h WRAP arch/x86/include/generated/uapi/asm/param.h WRAP arch/x86/include/generated/uapi/asm/poll.h WRAP arch/x86/include/generated/uapi/asm/resource.h WRAP arch/x86/include/generated/uapi/asm/socket.h WRAP arch/x86/include/generated/uapi/asm/sockios.h WRAP arch/x86/include/generated/uapi/asm/termbits.h WRAP arch/x86/include/generated/uapi/asm/termios.h WRAP arch/x86/include/generated/uapi/asm/types.h SYSTBL arch/x86/include/generated/asm/syscalls_32.h SYSHDR arch/x86/include/generated/uapi/asm/unistd_32.h SYSHDR arch/x86/include/generated/uapi/asm/unistd_64.h SYSHDR arch/x86/include/generated/uapi/asm/unistd_x32.h HOSTCC arch/x86/tools/relocs_32.o HOSTCC arch/x86/tools/relocs_64.o HOSTCC arch/x86/tools/relocs_common.o HOSTLD arch/x86/tools/relocs UPD include/generated/uapi/linux/version.h HDRINST usr/include/video/edid.h HDRINST usr/include/video/sisfb.h HDRINST usr/include/video/uvesafb.h HDRINST usr/include/drm/armada_drm.h HDRINST usr/include/drm/drm_sarea.h HDRINST usr/include/drm/exynos_drm.h HDRINST usr/include/drm/i810_drm.h HDRINST usr/include/drm/mga_drm.h HDRINST usr/include/drm/qxl_drm.h HDRINST usr/include/drm/r128_drm.h HDRINST usr/include/drm/radeon_drm.h HDRINST usr/include/drm/savage_drm.h HDRINST usr/include/drm/sis_drm.h HDRINST usr/include/drm/tegra_drm.h HDRINST usr/include/drm/vc4_drm.h HDRINST usr/include/drm/vgem_drm.h HDRINST usr/include/drm/via_drm.h HDRINST usr/include/drm/vmwgfx_drm.h HDRINST usr/include/drm/omap_drm.h HDRINST usr/include/drm/drm.h HDRINST usr/include/drm/drm_fourcc.h HDRINST usr/include/drm/drm_mode.h HDRINST usr/include/drm/etnaviv_drm.h HDRINST usr/include/drm/i915_drm.h HDRINST usr/include/drm/lima_drm.h HDRINST usr/include/drm/msm_drm.h HDRINST usr/include/drm/nouveau_drm.h HDRINST usr/include/drm/panfrost_drm.h HDRINST usr/include/drm/v3d_drm.h HDRINST usr/include/drm/virtgpu_drm.h HDRINST usr/include/drm/amdgpu_drm.h HDRINST usr/include/mtd/inftl-user.h HDRINST usr/include/mtd/mtd-user.h HDRINST usr/include/mtd/nftl-user.h HDRINST usr/include/mtd/mtd-abi.h HDRINST usr/include/mtd/ubi-user.h HDRINST usr/include/xen/evtchn.h HDRINST usr/include/xen/gntalloc.h HDRINST usr/include/xen/gntdev.h HDRINST usr/include/xen/privcmd.h HDRINST usr/include/asm-generic/auxvec.h HDRINST usr/include/asm-generic/bitsperlong.h HDRINST usr/include/asm-generic/bpf_perf_event.h HDRINST usr/include/asm-generic/errno-base.h HDRINST usr/include/asm-generic/errno.h HDRINST usr/include/asm-generic/fcntl.h HDRINST usr/include/asm-generic/int-l64.h HDRINST usr/include/asm-generic/int-ll64.h HDRINST usr/include/asm-generic/ioctl.h HDRINST usr/include/asm-generic/ipcbuf.h HDRINST usr/include/asm-generic/kvm_para.h HDRINST usr/include/asm-generic/msgbuf.h HDRINST usr/include/asm-generic/param.h HDRINST usr/include/asm-generic/poll.h HDRINST usr/include/asm-generic/posix_types.h HDRINST usr/include/asm-generic/resource.h HDRINST usr/include/asm-generic/sembuf.h HDRINST usr/include/asm-generic/setup.h HDRINST usr/include/asm-generic/shmbuf.h HDRINST usr/include/asm-generic/signal-defs.h HDRINST usr/include/asm-generic/signal.h HDRINST usr/include/asm-generic/stat.h HDRINST usr/include/asm-generic/statfs.h HDRINST usr/include/asm-generic/swab.h HDRINST usr/include/asm-generic/termbits.h HDRINST usr/include/asm-generic/termios.h HDRINST usr/include/asm-generic/types.h HDRINST usr/include/asm-generic/ucontext.h HDRINST usr/include/asm-generic/hugetlb_encode.h HDRINST usr/include/asm-generic/ioctls.h HDRINST usr/include/asm-generic/mman-common.h HDRINST usr/include/asm-generic/mman.h HDRINST usr/include/asm-generic/siginfo.h HDRINST usr/include/asm-generic/socket.h HDRINST usr/include/asm-generic/sockios.h HDRINST usr/include/asm-generic/unistd.h HDRINST usr/include/rdma/cxgb4-abi.h HDRINST usr/include/rdma/hfi/hfi1_ioctl.h HDRINST usr/include/rdma/hfi/hfi1_user.h HDRINST usr/include/rdma/i40iw-abi.h HDRINST usr/include/rdma/ib_user_mad.h HDRINST usr/include/rdma/ib_user_sa.h HDRINST usr/include/rdma/mlx4-abi.h HDRINST usr/include/rdma/mthca-abi.h HDRINST usr/include/rdma/nes-abi.h HDRINST usr/include/rdma/ocrdma-abi.h HDRINST usr/include/rdma/qedr-abi.h HDRINST usr/include/rdma/rdma_user_ioctl.h HDRINST usr/include/rdma/cxgb3-abi.h HDRINST usr/include/rdma/bnxt_re-abi.h HDRINST usr/include/rdma/efa-abi.h HDRINST usr/include/rdma/hns-abi.h HDRINST usr/include/rdma/ib_user_ioctl_cmds.h HDRINST usr/include/rdma/ib_user_ioctl_verbs.h HDRINST usr/include/rdma/ib_user_verbs.h HDRINST usr/include/rdma/mlx5-abi.h HDRINST usr/include/rdma/mlx5_user_ioctl_cmds.h HDRINST usr/include/rdma/mlx5_user_ioctl_verbs.h HDRINST usr/include/rdma/rdma_netlink.h HDRINST usr/include/rdma/rdma_user_cm.h HDRINST usr/include/rdma/rdma_user_ioctl_cmds.h HDRINST usr/include/rdma/rdma_user_rxe.h HDRINST usr/include/rdma/rvt-abi.h HDRINST usr/include/rdma/siw-abi.h HDRINST usr/include/rdma/vmw_pvrdma-abi.h HDRINST usr/include/misc/cxl.h HDRINST usr/include/misc/fastrpc.h HDRINST usr/include/misc/habanalabs.h HDRINST usr/include/misc/ocxl.h HDRINST usr/include/misc/xilinx_sdfec.h HDRINST usr/include/linux/a.out.h HDRINST usr/include/linux/acct.h HDRINST usr/include/linux/adb.h HDRINST usr/include/linux/affs_hardblocks.h HDRINST usr/include/linux/agpgart.h HDRINST usr/include/linux/am437x-vpfe.h HDRINST usr/include/linux/android/binder.h HDRINST usr/include/linux/android/binderfs.h HDRINST usr/include/linux/apm_bios.h HDRINST usr/include/linux/arcfb.h HDRINST usr/include/linux/arm_sdei.h HDRINST usr/include/linux/aspeed-lpc-ctrl.h HDRINST usr/include/linux/atalk.h HDRINST usr/include/linux/atm.h HDRINST usr/include/linux/atm_eni.h HDRINST usr/include/linux/atm_he.h HDRINST usr/include/linux/atm_idt77105.h HDRINST usr/include/linux/atm_nicstar.h HDRINST usr/include/linux/atm_tcp.h HDRINST usr/include/linux/atm_zatm.h HDRINST usr/include/linux/atmapi.h HDRINST usr/include/linux/atmarp.h HDRINST usr/include/linux/atmbr2684.h HDRINST usr/include/linux/atmclip.h HDRINST usr/include/linux/atmdev.h HDRINST usr/include/linux/atmioc.h HDRINST usr/include/linux/atmlec.h HDRINST usr/include/linux/atmmpc.h HDRINST usr/include/linux/atmppp.h HDRINST usr/include/linux/atmsap.h HDRINST usr/include/linux/atmsvc.h HDRINST usr/include/linux/auto_dev-ioctl.h HDRINST usr/include/linux/auto_fs4.h HDRINST usr/include/linux/auxvec.h HDRINST usr/include/linux/ax25.h HDRINST usr/include/linux/b1lli.h HDRINST usr/include/linux/baycom.h HDRINST usr/include/linux/bcache.h HDRINST usr/include/linux/bcm933xx_hcs.h HDRINST usr/include/linux/blkpg.h HDRINST usr/include/linux/blktrace_api.h HDRINST usr/include/linux/bpf_common.h HDRINST usr/include/linux/bpf_perf_event.h HDRINST usr/include/linux/bpqether.h HDRINST usr/include/linux/bsg.h HDRINST usr/include/linux/bt-bmc.h HDRINST usr/include/linux/byteorder/big_endian.h HDRINST usr/include/linux/byteorder/little_endian.h HDRINST usr/include/linux/caif/caif_socket.h HDRINST usr/include/linux/caif/if_caif.h HDRINST usr/include/linux/can/bcm.h HDRINST usr/include/linux/can/error.h HDRINST usr/include/linux/can/raw.h HDRINST usr/include/linux/can/vxcan.h HDRINST usr/include/linux/can/gw.h HDRINST usr/include/linux/can/j1939.h HDRINST usr/include/linux/can/netlink.h HDRINST usr/include/linux/capability.h HDRINST usr/include/linux/capi.h HDRINST usr/include/linux/cciss_defs.h HDRINST usr/include/linux/cciss_ioctl.h HDRINST usr/include/linux/cdrom.h HDRINST usr/include/linux/cgroupstats.h HDRINST usr/include/linux/cifs/cifs_mount.h HDRINST usr/include/linux/cm4000_cs.h HDRINST usr/include/linux/cn_proc.h HDRINST usr/include/linux/connector.h HDRINST usr/include/linux/const.h HDRINST usr/include/linux/coresight-stm.h HDRINST usr/include/linux/cramfs_fs.h HDRINST usr/include/linux/cuda.h HDRINST usr/include/linux/cyclades.h HDRINST usr/include/linux/cycx_cfm.h HDRINST usr/include/linux/dcbnl.h HDRINST usr/include/linux/dccp.h HDRINST usr/include/linux/dlm.h HDRINST usr/include/linux/dlm_device.h HDRINST usr/include/linux/dlm_netlink.h HDRINST usr/include/linux/dlm_plock.h HDRINST usr/include/linux/dlmconstants.h HDRINST usr/include/linux/dm-log-userspace.h HDRINST usr/include/linux/dn.h HDRINST usr/include/linux/dqblk_xfs.h HDRINST usr/include/linux/dvb/ca.h HDRINST usr/include/linux/dvb/dmx.h HDRINST usr/include/linux/dvb/frontend.h HDRINST usr/include/linux/dvb/net.h HDRINST usr/include/linux/dvb/version.h HDRINST usr/include/linux/dvb/audio.h HDRINST usr/include/linux/dvb/osd.h HDRINST usr/include/linux/dvb/video.h HDRINST usr/include/linux/edd.h HDRINST usr/include/linux/efs_fs_sb.h HDRINST usr/include/linux/elf-fdpic.h HDRINST usr/include/linux/elfcore.h HDRINST usr/include/linux/errno.h HDRINST usr/include/linux/erspan.h HDRINST usr/include/linux/eventpoll.h HDRINST usr/include/linux/fadvise.h HDRINST usr/include/linux/falloc.h HDRINST usr/include/linux/fd.h HDRINST usr/include/linux/fdreg.h HDRINST usr/include/linux/fib_rules.h HDRINST usr/include/linux/fiemap.h HDRINST usr/include/linux/filter.h HDRINST usr/include/linux/firewire-constants.h HDRINST usr/include/linux/fsi.h HDRINST usr/include/linux/fsl_hypervisor.h HDRINST usr/include/linux/fsmap.h HDRINST usr/include/linux/futex.h HDRINST usr/include/linux/gameport.h HDRINST usr/include/linux/genetlink.h HDRINST usr/include/linux/genwqe/genwqe_card.h HDRINST usr/include/linux/gfs2_ondisk.h HDRINST usr/include/linux/gigaset_dev.h HDRINST usr/include/linux/gtp.h HDRINST usr/include/linux/hdlc.h HDRINST usr/include/linux/hdlc/ioctl.h HDRINST usr/include/linux/hdlcdrv.h HDRINST usr/include/linux/hdreg.h HDRINST usr/include/linux/hid.h HDRINST usr/include/linux/hiddev.h HDRINST usr/include/linux/hidraw.h HDRINST usr/include/linux/hpet.h HDRINST usr/include/linux/hsi/cs-protocol.h HDRINST usr/include/linux/hsi/hsi_char.h HDRINST usr/include/linux/hsr_netlink.h HDRINST usr/include/linux/hw_breakpoint.h HDRINST usr/include/linux/hyperv.h HDRINST usr/include/linux/hysdn_if.h HDRINST usr/include/linux/i2c-dev.h HDRINST usr/include/linux/i2c.h HDRINST usr/include/linux/i2o-dev.h HDRINST usr/include/linux/i8k.h HDRINST usr/include/linux/icmp.h HDRINST usr/include/linux/if_addrlabel.h HDRINST usr/include/linux/if_alg.h HDRINST usr/include/linux/if_arcnet.h HDRINST usr/include/linux/if_cablemodem.h HDRINST usr/include/linux/if_eql.h HDRINST usr/include/linux/if_fc.h HDRINST usr/include/linux/if_frad.h HDRINST usr/include/linux/if_hippi.h HDRINST usr/include/linux/if_infiniband.h HDRINST usr/include/linux/if_ltalk.h HDRINST usr/include/linux/if_macsec.h HDRINST usr/include/linux/if_phonet.h HDRINST usr/include/linux/if_plip.h HDRINST usr/include/linux/if_ppp.h HDRINST usr/include/linux/if_pppol2tp.h HDRINST usr/include/linux/if_pppox.h HDRINST usr/include/linux/if_slip.h HDRINST usr/include/linux/if_team.h HDRINST usr/include/linux/if_x25.h HDRINST usr/include/linux/ife.h HDRINST usr/include/linux/iio/events.h HDRINST usr/include/linux/iio/types.h HDRINST usr/include/linux/ila.h HDRINST usr/include/linux/in_route.h HDRINST usr/include/linux/inotify.h HDRINST usr/include/linux/ioctl.h HDRINST usr/include/linux/ip.h HDRINST usr/include/linux/ip6_tunnel.h HDRINST usr/include/linux/ipc.h HDRINST usr/include/linux/ipmi.h HDRINST usr/include/linux/ipmi_msgdefs.h HDRINST usr/include/linux/ipsec.h HDRINST usr/include/linux/ipv6_route.h HDRINST usr/include/linux/ipx.h HDRINST usr/include/linux/irqnr.h HDRINST usr/include/linux/isdn/capicmd.h HDRINST usr/include/linux/iso_fs.h HDRINST usr/include/linux/ivtv.h HDRINST usr/include/linux/ivtvfb.h HDRINST usr/include/linux/joystick.h HDRINST usr/include/linux/kcm.h HDRINST usr/include/linux/kcmp.h HDRINST usr/include/linux/kcov.h HDRINST usr/include/linux/kd.h HDRINST usr/include/linux/kdev_t.h HDRINST usr/include/linux/kernel.h HDRINST usr/include/linux/kernelcapi.h HDRINST usr/include/linux/keyboard.h HDRINST usr/include/linux/l2tp.h HDRINST usr/include/linux/lightnvm.h HDRINST usr/include/linux/llc.h HDRINST usr/include/linux/loop.h HDRINST usr/include/linux/lp.h HDRINST usr/include/linux/lwtunnel.h HDRINST usr/include/linux/major.h HDRINST usr/include/linux/map_to_7segment.h HDRINST usr/include/linux/matroxfb.h HDRINST usr/include/linux/max2175.h HDRINST usr/include/linux/membarrier.h HDRINST usr/include/linux/mempolicy.h HDRINST usr/include/linux/meye.h HDRINST usr/include/linux/mic_common.h HDRINST usr/include/linux/mic_ioctl.h HDRINST usr/include/linux/minix_fs.h HDRINST usr/include/linux/mmc/ioctl.h HDRINST usr/include/linux/mmtimer.h HDRINST usr/include/linux/module.h HDRINST usr/include/linux/mpls.h HDRINST usr/include/linux/mpls_iptunnel.h HDRINST usr/include/linux/mqueue.h HDRINST usr/include/linux/msg.h HDRINST usr/include/linux/mtio.h HDRINST usr/include/linux/n_r3964.h HDRINST usr/include/linux/nbd-netlink.h HDRINST usr/include/linux/nbd.h HDRINST usr/include/linux/net.h HDRINST usr/include/linux/netconf.h HDRINST usr/include/linux/netdevice.h HDRINST usr/include/linux/netfilter/ipset/ip_set_bitmap.h HDRINST usr/include/linux/netfilter/ipset/ip_set_hash.h HDRINST usr/include/linux/netfilter/ipset/ip_set_list.h HDRINST usr/include/linux/netfilter/ipset/ip_set.h HDRINST usr/include/linux/netfilter/nf_conntrack_common.h HDRINST usr/include/linux/netfilter/nf_conntrack_ftp.h HDRINST usr/include/linux/netfilter/nf_conntrack_sctp.h HDRINST usr/include/linux/netfilter/nf_conntrack_tcp.h HDRINST usr/include/linux/netfilter/nf_conntrack_tuple_common.h HDRINST usr/include/linux/netfilter/nf_log.h HDRINST usr/include/linux/netfilter/nf_nat.h HDRINST usr/include/linux/netfilter/nf_tables_compat.h HDRINST usr/include/linux/netfilter/nfnetlink.h HDRINST usr/include/linux/netfilter/nfnetlink_acct.h HDRINST usr/include/linux/netfilter/nfnetlink_compat.h HDRINST usr/include/linux/netfilter/nfnetlink_conntrack.h HDRINST usr/include/linux/netfilter/nfnetlink_cthelper.h HDRINST usr/include/linux/netfilter/nfnetlink_cttimeout.h HDRINST usr/include/linux/netfilter/nfnetlink_osf.h HDRINST usr/include/linux/netfilter/nfnetlink_queue.h HDRINST usr/include/linux/netfilter/x_tables.h HDRINST usr/include/linux/netfilter/xt_AUDIT.h HDRINST usr/include/linux/netfilter/xt_CHECKSUM.h HDRINST usr/include/linux/netfilter/xt_CLASSIFY.h HDRINST usr/include/linux/netfilter/xt_CONNMARK.h HDRINST usr/include/linux/netfilter/xt_CONNSECMARK.h HDRINST usr/include/linux/netfilter/xt_CT.h HDRINST usr/include/linux/netfilter/xt_DSCP.h HDRINST usr/include/linux/netfilter/xt_HMARK.h HDRINST usr/include/linux/netfilter/xt_IDLETIMER.h HDRINST usr/include/linux/netfilter/xt_LED.h HDRINST usr/include/linux/netfilter/xt_LOG.h HDRINST usr/include/linux/netfilter/xt_MARK.h HDRINST usr/include/linux/netfilter/xt_NFLOG.h HDRINST usr/include/linux/netfilter/xt_NFQUEUE.h HDRINST usr/include/linux/netfilter/xt_RATEEST.h HDRINST usr/include/linux/netfilter/xt_SECMARK.h HDRINST usr/include/linux/netfilter/xt_TCPMSS.h HDRINST usr/include/linux/netfilter/xt_TCPOPTSTRIP.h HDRINST usr/include/linux/netfilter/xt_TEE.h HDRINST usr/include/linux/netfilter/xt_TPROXY.h HDRINST usr/include/linux/netfilter/xt_addrtype.h HDRINST usr/include/linux/netfilter/xt_bpf.h HDRINST usr/include/linux/netfilter/xt_cluster.h HDRINST usr/include/linux/netfilter/xt_comment.h HDRINST usr/include/linux/netfilter/xt_connbytes.h HDRINST usr/include/linux/netfilter/xt_connlimit.h HDRINST usr/include/linux/netfilter/xt_connmark.h HDRINST usr/include/linux/netfilter/xt_conntrack.h HDRINST usr/include/linux/netfilter/xt_cpu.h HDRINST usr/include/linux/netfilter/xt_dccp.h HDRINST usr/include/linux/netfilter/xt_devgroup.h HDRINST usr/include/linux/netfilter/xt_dscp.h HDRINST usr/include/linux/netfilter/xt_ecn.h HDRINST usr/include/linux/netfilter/xt_esp.h HDRINST usr/include/linux/netfilter/xt_hashlimit.h HDRINST usr/include/linux/netfilter/xt_helper.h HDRINST usr/include/linux/netfilter/xt_ipcomp.h HDRINST usr/include/linux/netfilter/xt_iprange.h HDRINST usr/include/linux/netfilter/xt_ipvs.h HDRINST usr/include/linux/netfilter/xt_l2tp.h HDRINST usr/include/linux/netfilter/xt_length.h HDRINST usr/include/linux/netfilter/xt_limit.h HDRINST usr/include/linux/netfilter/xt_mac.h HDRINST usr/include/linux/netfilter/xt_mark.h HDRINST usr/include/linux/netfilter/xt_multiport.h HDRINST usr/include/linux/netfilter/xt_osf.h HDRINST usr/include/linux/netfilter/xt_physdev.h HDRINST usr/include/linux/netfilter/xt_pkttype.h HDRINST usr/include/linux/netfilter/xt_quota.h HDRINST usr/include/linux/netfilter/xt_rateest.h HDRINST usr/include/linux/netfilter/xt_realm.h HDRINST usr/include/linux/netfilter/xt_recent.h HDRINST usr/include/linux/netfilter/xt_rpfilter.h HDRINST usr/include/linux/netfilter/xt_sctp.h HDRINST usr/include/linux/netfilter/xt_set.h HDRINST usr/include/linux/netfilter/xt_socket.h HDRINST usr/include/linux/netfilter/xt_state.h HDRINST usr/include/linux/netfilter/xt_statistic.h HDRINST usr/include/linux/netfilter/xt_string.h HDRINST usr/include/linux/netfilter/xt_tcpmss.h HDRINST usr/include/linux/netfilter/xt_tcpudp.h HDRINST usr/include/linux/netfilter/xt_time.h HDRINST usr/include/linux/netfilter/xt_u32.h HDRINST usr/include/linux/netfilter/nf_synproxy.h HDRINST usr/include/linux/netfilter/nf_tables.h HDRINST usr/include/linux/netfilter/nfnetlink_log.h HDRINST usr/include/linux/netfilter/xt_SYNPROXY.h HDRINST usr/include/linux/netfilter/xt_cgroup.h HDRINST usr/include/linux/netfilter/xt_connlabel.h HDRINST usr/include/linux/netfilter/xt_nfacct.h HDRINST usr/include/linux/netfilter/xt_owner.h HDRINST usr/include/linux/netfilter/xt_policy.h HDRINST usr/include/linux/netfilter_arp.h HDRINST usr/include/linux/netfilter_arp/arpt_mangle.h HDRINST usr/include/linux/netfilter_arp/arp_tables.h HDRINST usr/include/linux/netfilter_bridge/ebt_802_3.h HDRINST usr/include/linux/netfilter_bridge/ebt_among.h HDRINST usr/include/linux/netfilter_bridge/ebt_arp.h HDRINST usr/include/linux/netfilter_bridge/ebt_arpreply.h HDRINST usr/include/linux/netfilter_bridge/ebt_ip.h HDRINST usr/include/linux/netfilter_bridge/ebt_ip6.h HDRINST usr/include/linux/netfilter_bridge/ebt_limit.h HDRINST usr/include/linux/netfilter_bridge/ebt_log.h HDRINST usr/include/linux/netfilter_bridge/ebt_mark_m.h HDRINST usr/include/linux/netfilter_bridge/ebt_mark_t.h HDRINST usr/include/linux/netfilter_bridge/ebt_nat.h HDRINST usr/include/linux/netfilter_bridge/ebt_nflog.h HDRINST usr/include/linux/netfilter_bridge/ebt_pkttype.h HDRINST usr/include/linux/netfilter_bridge/ebt_redirect.h HDRINST usr/include/linux/netfilter_bridge/ebt_stp.h HDRINST usr/include/linux/netfilter_bridge/ebt_vlan.h HDRINST usr/include/linux/netfilter_bridge/ebtables.h HDRINST usr/include/linux/netfilter_ipv4/ipt_CLUSTERIP.h HDRINST usr/include/linux/netfilter_ipv4/ipt_ECN.h HDRINST usr/include/linux/netfilter_ipv4/ipt_REJECT.h HDRINST usr/include/linux/netfilter_ipv4/ipt_TTL.h HDRINST usr/include/linux/netfilter_ipv4/ipt_ah.h HDRINST usr/include/linux/netfilter_ipv4/ipt_ecn.h HDRINST usr/include/linux/netfilter_ipv4/ipt_ttl.h HDRINST usr/include/linux/netfilter_ipv4/ip_tables.h HDRINST usr/include/linux/netfilter_ipv4/ipt_LOG.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_HL.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_NPT.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_REJECT.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_ah.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_frag.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_hl.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_ipv6header.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_mh.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_opts.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_rt.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_srh.h HDRINST usr/include/linux/netfilter_ipv6/ip6_tables.h HDRINST usr/include/linux/netfilter_ipv6/ip6t_LOG.h HDRINST usr/include/linux/netlink_diag.h HDRINST usr/include/linux/netrom.h HDRINST usr/include/linux/nfc.h HDRINST usr/include/linux/nfs.h HDRINST usr/include/linux/nfs2.h HDRINST usr/include/linux/nfs3.h HDRINST usr/include/linux/nfs4.h HDRINST usr/include/linux/nfs4_mount.h HDRINST usr/include/linux/nfs_fs.h HDRINST usr/include/linux/nfs_idmap.h HDRINST usr/include/linux/nfsacl.h HDRINST usr/include/linux/nfsd/debug.h HDRINST usr/include/linux/nfsd/export.h HDRINST usr/include/linux/nfsd/nfsfh.h HDRINST usr/include/linux/nfsd/stats.h HDRINST usr/include/linux/nfsd/cld.h HDRINST usr/include/linux/nilfs2_api.h HDRINST usr/include/linux/nsfs.h HDRINST usr/include/linux/nubus.h HDRINST usr/include/linux/nvram.h HDRINST usr/include/linux/omap3isp.h HDRINST usr/include/linux/omapfb.h HDRINST usr/include/linux/oom.h HDRINST usr/include/linux/packet_diag.h HDRINST usr/include/linux/param.h HDRINST usr/include/linux/parport.h HDRINST usr/include/linux/patchkey.h HDRINST usr/include/linux/pci.h HDRINST usr/include/linux/pcitest.h HDRINST usr/include/linux/personality.h HDRINST usr/include/linux/pfkeyv2.h HDRINST usr/include/linux/phantom.h HDRINST usr/include/linux/phonet.h HDRINST usr/include/linux/pktcdvd.h HDRINST usr/include/linux/poll.h HDRINST usr/include/linux/posix_acl.h HDRINST usr/include/linux/posix_acl_xattr.h HDRINST usr/include/linux/posix_types.h HDRINST usr/include/linux/ppp-comp.h HDRINST usr/include/linux/pps.h HDRINST usr/include/linux/pr.h HDRINST usr/include/linux/psample.h HDRINST usr/include/linux/qemu_fw_cfg.h HDRINST usr/include/linux/qnx4_fs.h HDRINST usr/include/linux/qnxtypes.h HDRINST usr/include/linux/qrtr.h HDRINST usr/include/linux/quota.h HDRINST usr/include/linux/radeonfb.h HDRINST usr/include/linux/raid/md_u.h HDRINST usr/include/linux/raid/md_p.h HDRINST usr/include/linux/random.h HDRINST usr/include/linux/raw.h HDRINST usr/include/linux/reboot.h HDRINST usr/include/linux/reiserfs_fs.h HDRINST usr/include/linux/reiserfs_xattr.h HDRINST usr/include/linux/resource.h HDRINST usr/include/linux/rfkill.h HDRINST usr/include/linux/rio_cm_cdev.h HDRINST usr/include/linux/rio_mport_cdev.h HDRINST usr/include/linux/romfs_fs.h HDRINST usr/include/linux/rose.h HDRINST usr/include/linux/route.h HDRINST usr/include/linux/rpmsg.h HDRINST usr/include/linux/rseq.h HDRINST usr/include/linux/rtc.h HDRINST usr/include/linux/scc.h HDRINST usr/include/linux/sched/types.h HDRINST usr/include/linux/scif_ioctl.h HDRINST usr/include/linux/screen_info.h HDRINST usr/include/linux/sdla.h HDRINST usr/include/linux/securebits.h HDRINST usr/include/linux/seg6.h HDRINST usr/include/linux/seg6_genl.h HDRINST usr/include/linux/seg6_hmac.h HDRINST usr/include/linux/seg6_iptunnel.h HDRINST usr/include/linux/seg6_local.h HDRINST usr/include/linux/selinux_netlink.h HDRINST usr/include/linux/sem.h HDRINST usr/include/linux/serial_reg.h HDRINST usr/include/linux/signal.h HDRINST usr/include/linux/signalfd.h HDRINST usr/include/linux/smc.h HDRINST usr/include/linux/smiapp.h HDRINST usr/include/linux/sock_diag.h HDRINST usr/include/linux/sonet.h HDRINST usr/include/linux/sonypi.h HDRINST usr/include/linux/sound.h HDRINST usr/include/linux/soundcard.h HDRINST usr/include/linux/spi/spidev.h HDRINST usr/include/linux/stat.h HDRINST usr/include/linux/stddef.h HDRINST usr/include/linux/stm.h HDRINST usr/include/linux/string.h HDRINST usr/include/linux/sunrpc/debug.h HDRINST usr/include/linux/suspend_ioctls.h HDRINST usr/include/linux/swab.h HDRINST usr/include/linux/sync_file.h HDRINST usr/include/linux/synclink.h HDRINST usr/include/linux/sysinfo.h HDRINST usr/include/linux/target_core_user.h HDRINST usr/include/linux/tc_act/tc_defact.h HDRINST usr/include/linux/tc_act/tc_bpf.h HDRINST usr/include/linux/tc_act/tc_connmark.h HDRINST usr/include/linux/tc_act/tc_csum.h HDRINST usr/include/linux/tc_act/tc_ct.h HDRINST usr/include/linux/tc_act/tc_ctinfo.h HDRINST usr/include/linux/tc_act/tc_gact.h HDRINST usr/include/linux/tc_act/tc_ife.h HDRINST usr/include/linux/tc_act/tc_ipt.h HDRINST usr/include/linux/tc_act/tc_mirred.h HDRINST usr/include/linux/tc_act/tc_mpls.h HDRINST usr/include/linux/tc_act/tc_nat.h HDRINST usr/include/linux/tc_act/tc_pedit.h HDRINST usr/include/linux/tc_act/tc_sample.h HDRINST usr/include/linux/tc_act/tc_skbedit.h HDRINST usr/include/linux/tc_act/tc_skbmod.h HDRINST usr/include/linux/tc_act/tc_tunnel_key.h HDRINST usr/include/linux/tc_act/tc_vlan.h HDRINST usr/include/linux/tc_ematch/tc_em_cmp.h HDRINST usr/include/linux/tc_ematch/tc_em_ipt.h HDRINST usr/include/linux/tc_ematch/tc_em_meta.h HDRINST usr/include/linux/tc_ematch/tc_em_nbyte.h HDRINST usr/include/linux/tc_ematch/tc_em_text.h HDRINST usr/include/linux/tcp_metrics.h HDRINST usr/include/linux/tee.h HDRINST usr/include/linux/termios.h HDRINST usr/include/linux/thermal.h HDRINST usr/include/linux/timerfd.h HDRINST usr/include/linux/times.h HDRINST usr/include/linux/tiocl.h HDRINST usr/include/linux/tipc_sockets_diag.h HDRINST usr/include/linux/toshiba.h HDRINST usr/include/linux/tty.h HDRINST usr/include/linux/tty_flags.h HDRINST usr/include/linux/types.h HDRINST usr/include/linux/udf_fs_i.h HDRINST usr/include/linux/uhid.h HDRINST usr/include/linux/uinput.h HDRINST usr/include/linux/uio.h HDRINST usr/include/linux/uleds.h HDRINST usr/include/linux/ultrasound.h HDRINST usr/include/linux/un.h HDRINST usr/include/linux/unistd.h HDRINST usr/include/linux/usb/cdc-wdm.h HDRINST usr/include/linux/usb/cdc.h HDRINST usr/include/linux/usb/ch11.h HDRINST usr/include/linux/usb/charger.h HDRINST usr/include/linux/usb/functionfs.h HDRINST usr/include/linux/usb/g_printer.h HDRINST usr/include/linux/usb/gadgetfs.h HDRINST usr/include/linux/usb/midi.h HDRINST usr/include/linux/usb/audio.h HDRINST usr/include/linux/usb/ch9.h HDRINST usr/include/linux/usb/g_uvc.h HDRINST usr/include/linux/usb/tmc.h HDRINST usr/include/linux/usb/video.h HDRINST usr/include/linux/usbip.h HDRINST usr/include/linux/userfaultfd.h HDRINST usr/include/linux/userio.h HDRINST usr/include/linux/utime.h HDRINST usr/include/linux/utsname.h HDRINST usr/include/linux/uuid.h HDRINST usr/include/linux/uvcvideo.h HDRINST usr/include/linux/v4l2-dv-timings.h HDRINST usr/include/linux/v4l2-mediabus.h HDRINST usr/include/linux/v4l2-subdev.h HDRINST usr/include/linux/vbox_err.h HDRINST usr/include/linux/veth.h HDRINST usr/include/linux/virtio_9p.h HDRINST usr/include/linux/virtio_console.h HDRINST usr/include/linux/virtio_crypto.h HDRINST usr/include/linux/virtio_input.h HDRINST usr/include/linux/virtio_mmio.h HDRINST usr/include/linux/virtio_net.h HDRINST usr/include/linux/virtio_pci.h HDRINST usr/include/linux/virtio_rng.h HDRINST usr/include/linux/virtio_scsi.h HDRINST usr/include/linux/virtio_types.h HDRINST usr/include/linux/virtio_vsock.h HDRINST usr/include/linux/vm_sockets.h HDRINST usr/include/linux/vm_sockets_diag.h HDRINST usr/include/linux/vsockmon.h HDRINST usr/include/linux/vt.h HDRINST usr/include/linux/vtpm_proxy.h HDRINST usr/include/linux/watchdog.h HDRINST usr/include/linux/wimax.h HDRINST usr/include/linux/wimax/i2400m.h HDRINST usr/include/linux/wireless.h HDRINST usr/include/linux/x25.h HDRINST usr/include/linux/xattr.h HDRINST usr/include/linux/xfrm.h HDRINST usr/include/linux/xilinx-v4l2-controls.h HDRINST usr/include/linux/zorro.h HDRINST usr/include/linux/zorro_ids.h HDRINST usr/include/linux/libc-compat.h HDRINST usr/include/linux/ppp-ioctl.h HDRINST usr/include/linux/ppp_defs.h HDRINST usr/include/linux/cec-funcs.h HDRINST usr/include/linux/chio.h HDRINST usr/include/linux/if.h HDRINST usr/include/linux/ipv6.h HDRINST usr/include/linux/adfs_fs.h HDRINST usr/include/linux/aio_abi.h HDRINST usr/include/linux/aspeed-p2a-ctrl.h HDRINST usr/include/linux/audit.h HDRINST usr/include/linux/auto_fs.h HDRINST usr/include/linux/batadv_packet.h HDRINST usr/include/linux/batman_adv.h HDRINST usr/include/linux/bfs_fs.h HDRINST usr/include/linux/binfmts.h HDRINST usr/include/linux/blkzoned.h HDRINST usr/include/linux/bpf.h HDRINST usr/include/linux/bpfilter.h HDRINST usr/include/linux/btf.h HDRINST usr/include/linux/btrfs.h HDRINST usr/include/linux/btrfs_tree.h HDRINST usr/include/linux/can.h HDRINST usr/include/linux/cec.h HDRINST usr/include/linux/coda.h HDRINST usr/include/linux/coff.h HDRINST usr/include/linux/cryptouser.h HDRINST usr/include/linux/devlink.h HDRINST usr/include/linux/dm-ioctl.h HDRINST usr/include/linux/dma-buf.h HDRINST usr/include/linux/dns_resolver.h HDRINST usr/include/linux/elf-em.h HDRINST usr/include/linux/elf.h HDRINST usr/include/linux/errqueue.h HDRINST usr/include/linux/ethtool.h HDRINST usr/include/linux/fanotify.h HDRINST usr/include/linux/fb.h HDRINST usr/include/linux/fcntl.h HDRINST usr/include/linux/firewire-cdev.h HDRINST usr/include/linux/fou.h HDRINST usr/include/linux/fpga-dfl.h HDRINST usr/include/linux/fs.h HDRINST usr/include/linux/fscrypt.h HDRINST usr/include/linux/fsverity.h HDRINST usr/include/linux/fuse.h HDRINST usr/include/linux/gen_stats.h HDRINST usr/include/linux/gpio.h HDRINST usr/include/linux/gsmmux.h HDRINST usr/include/linux/hash_info.h HDRINST usr/include/linux/icmpv6.h HDRINST usr/include/linux/if_addr.h HDRINST usr/include/linux/if_arp.h HDRINST usr/include/linux/if_bonding.h HDRINST usr/include/linux/if_bridge.h HDRINST usr/include/linux/if_ether.h HDRINST usr/include/linux/if_fddi.h HDRINST usr/include/linux/if_link.h HDRINST usr/include/linux/if_packet.h HDRINST usr/include/linux/if_tun.h HDRINST usr/include/linux/if_tunnel.h HDRINST usr/include/linux/if_vlan.h HDRINST usr/include/linux/if_xdp.h HDRINST usr/include/linux/igmp.h HDRINST usr/include/linux/in.h HDRINST usr/include/linux/in6.h HDRINST usr/include/linux/inet_diag.h HDRINST usr/include/linux/input-event-codes.h HDRINST usr/include/linux/input.h HDRINST usr/include/linux/io_uring.h HDRINST usr/include/linux/iommu.h HDRINST usr/include/linux/ip_vs.h HDRINST usr/include/linux/ipmi_bmc.h HDRINST usr/include/linux/isst_if.h HDRINST usr/include/linux/jffs2.h HDRINST usr/include/linux/kernel-page-flags.h HDRINST usr/include/linux/kexec.h HDRINST usr/include/linux/keyctl.h HDRINST usr/include/linux/kfd_ioctl.h HDRINST usr/include/linux/kvm.h HDRINST usr/include/linux/kvm_para.h HDRINST usr/include/linux/limits.h HDRINST usr/include/linux/lirc.h HDRINST usr/include/linux/magic.h HDRINST usr/include/linux/mdio.h HDRINST usr/include/linux/media-bus-format.h HDRINST usr/include/linux/media.h HDRINST usr/include/linux/mei.h HDRINST usr/include/linux/memfd.h HDRINST usr/include/linux/mii.h HDRINST usr/include/linux/mman.h HDRINST usr/include/linux/mount.h HDRINST usr/include/linux/mroute.h HDRINST usr/include/linux/mroute6.h HDRINST usr/include/linux/msdos_fs.h HDRINST usr/include/linux/ncsi.h HDRINST usr/include/linux/ndctl.h HDRINST usr/include/linux/neighbour.h HDRINST usr/include/linux/net_dropmon.h HDRINST usr/include/linux/net_namespace.h HDRINST usr/include/linux/net_tstamp.h HDRINST usr/include/linux/netfilter.h HDRINST usr/include/linux/netfilter_bridge.h HDRINST usr/include/linux/netfilter_decnet.h HDRINST usr/include/linux/netfilter_ipv4.h HDRINST usr/include/linux/netfilter_ipv6.h HDRINST usr/include/linux/netlink.h HDRINST usr/include/linux/nexthop.h HDRINST usr/include/linux/nfs_mount.h HDRINST usr/include/linux/nilfs2_ondisk.h HDRINST usr/include/linux/nl80211.h HDRINST usr/include/linux/openvswitch.h HDRINST usr/include/linux/pci_regs.h HDRINST usr/include/linux/perf_event.h HDRINST usr/include/linux/pkt_cls.h HDRINST usr/include/linux/pkt_sched.h HDRINST usr/include/linux/pmu.h HDRINST usr/include/linux/ppdev.h HDRINST usr/include/linux/prctl.h HDRINST usr/include/linux/psci.h HDRINST usr/include/linux/psp-sev.h HDRINST usr/include/linux/ptp_clock.h HDRINST usr/include/linux/ptrace.h HDRINST usr/include/linux/rds.h HDRINST usr/include/linux/rtnetlink.h HDRINST usr/include/linux/rxrpc.h HDRINST usr/include/linux/sctp.h HDRINST usr/include/linux/seccomp.h HDRINST usr/include/linux/sed-opal.h HDRINST usr/include/linux/serial.h HDRINST usr/include/linux/serio.h HDRINST usr/include/linux/shm.h HDRINST usr/include/linux/smc_diag.h HDRINST usr/include/linux/snmp.h HDRINST usr/include/linux/socket.h HDRINST usr/include/linux/sockios.h HDRINST usr/include/linux/switchtec_ioctl.h HDRINST usr/include/linux/sysctl.h HDRINST usr/include/linux/taskstats.h HDRINST usr/include/linux/tcp.h HDRINST usr/include/linux/time.h HDRINST usr/include/linux/time_types.h HDRINST usr/include/linux/timex.h HDRINST usr/include/linux/tipc.h HDRINST usr/include/linux/tipc_config.h HDRINST usr/include/linux/tipc_netlink.h HDRINST usr/include/linux/tls.h HDRINST usr/include/linux/udmabuf.h HDRINST usr/include/linux/udp.h HDRINST usr/include/linux/unix_diag.h HDRINST usr/include/linux/usbdevice_fs.h HDRINST usr/include/linux/v4l2-common.h HDRINST usr/include/linux/v4l2-controls.h HDRINST usr/include/linux/vbox_vmmdev_types.h HDRINST usr/include/linux/vboxguest.h HDRINST usr/include/linux/vfio.h HDRINST usr/include/linux/vfio_ccw.h HDRINST usr/include/linux/vhost.h HDRINST usr/include/linux/vhost_types.h HDRINST usr/include/linux/videodev2.h HDRINST usr/include/linux/virtio_balloon.h HDRINST usr/include/linux/virtio_blk.h HDRINST usr/include/linux/virtio_config.h HDRINST usr/include/linux/virtio_fs.h HDRINST usr/include/linux/virtio_gpu.h HDRINST usr/include/linux/virtio_ids.h HDRINST usr/include/linux/virtio_iommu.h HDRINST usr/include/linux/virtio_pmem.h HDRINST usr/include/linux/virtio_ring.h HDRINST usr/include/linux/vmcore.h HDRINST usr/include/linux/wait.h HDRINST usr/include/linux/wmi.h HDRINST usr/include/linux/xdp_diag.h HDRINST usr/include/linux/dma-heap.h HDRINST usr/include/linux/nvme_ioctl.h HDRINST usr/include/linux/pg.h HDRINST usr/include/linux/sched.h HDRINST usr/include/linux/serial_core.h HDRINST usr/include/sound/asequencer.h HDRINST usr/include/sound/asoc.h HDRINST usr/include/sound/asound_fm.h HDRINST usr/include/sound/compress_offload.h HDRINST usr/include/sound/compress_params.h HDRINST usr/include/sound/emu10k1.h HDRINST usr/include/sound/hdsp.h HDRINST usr/include/sound/hdspm.h HDRINST usr/include/sound/sb16_csp.h HDRINST usr/include/sound/sfnt_info.h HDRINST usr/include/sound/snd_sst_tokens.h HDRINST usr/include/sound/tlv.h HDRINST usr/include/sound/usb_stream.h HDRINST usr/include/sound/asound.h HDRINST usr/include/sound/firewire.h HDRINST usr/include/sound/skl-tplg-interface.h HDRINST usr/include/sound/sof/abi.h HDRINST usr/include/sound/sof/fw.h HDRINST usr/include/sound/sof/header.h HDRINST usr/include/sound/sof/tokens.h HDRINST usr/include/scsi/cxlflash_ioctl.h HDRINST usr/include/scsi/fc/fc_els.h HDRINST usr/include/scsi/fc/fc_fs.h HDRINST usr/include/scsi/fc/fc_gs.h HDRINST usr/include/scsi/fc/fc_ns.h HDRINST usr/include/scsi/scsi_bsg_fc.h HDRINST usr/include/scsi/scsi_bsg_ufs.h HDRINST usr/include/scsi/scsi_netlink.h HDRINST usr/include/scsi/scsi_netlink_fc.h HDRINST usr/include/linux/version.h HDRINST usr/include/asm/a.out.h HDRINST usr/include/asm/auxvec.h HDRINST usr/include/asm/bitsperlong.h HDRINST usr/include/asm/boot.h HDRINST usr/include/asm/debugreg.h HDRINST usr/include/asm/e820.h HDRINST usr/include/asm/hw_breakpoint.h HDRINST usr/include/asm/ist.h HDRINST usr/include/asm/kvm_perf.h HDRINST usr/include/asm/ldt.h HDRINST usr/include/asm/mce.h HDRINST usr/include/asm/mman.h HDRINST usr/include/asm/msgbuf.h HDRINST usr/include/asm/msr.h HDRINST usr/include/asm/mtrr.h HDRINST usr/include/asm/posix_types.h HDRINST usr/include/asm/posix_types_32.h HDRINST usr/include/asm/posix_types_64.h HDRINST usr/include/asm/posix_types_x32.h HDRINST usr/include/asm/prctl.h HDRINST usr/include/asm/processor-flags.h HDRINST usr/include/asm/ptrace-abi.h HDRINST usr/include/asm/ptrace.h HDRINST usr/include/asm/sembuf.h HDRINST usr/include/asm/setup.h HDRINST usr/include/asm/shmbuf.h HDRINST usr/include/asm/sigcontext.h HDRINST usr/include/asm/signal.h HDRINST usr/include/asm/stat.h HDRINST usr/include/asm/statfs.h HDRINST usr/include/asm/swab.h HDRINST usr/include/asm/ucontext.h HDRINST usr/include/asm/vm86.h HDRINST usr/include/asm/vsyscall.h HDRINST usr/include/asm/bootparam.h HDRINST usr/include/asm/byteorder.h HDRINST usr/include/asm/hwcap2.h HDRINST usr/include/asm/kvm.h HDRINST usr/include/asm/kvm_para.h HDRINST usr/include/asm/perf_regs.h HDRINST usr/include/asm/sigcontext32.h HDRINST usr/include/asm/siginfo.h HDRINST usr/include/asm/svm.h HDRINST usr/include/asm/unistd.h HDRINST usr/include/asm/vmx.h HDRINST usr/include/asm/unistd_x32.h HDRINST usr/include/asm/unistd_64.h HDRINST usr/include/asm/unistd_32.h HDRINST usr/include/asm/types.h HDRINST usr/include/asm/termios.h HDRINST usr/include/asm/termbits.h HDRINST usr/include/asm/sockios.h HDRINST usr/include/asm/socket.h HDRINST usr/include/asm/resource.h HDRINST usr/include/asm/poll.h HDRINST usr/include/asm/param.h HDRINST usr/include/asm/ipcbuf.h HDRINST usr/include/asm/ioctls.h HDRINST usr/include/asm/ioctl.h HDRINST usr/include/asm/fcntl.h HDRINST usr/include/asm/errno.h HDRINST usr/include/asm/bpf_perf_event.h INSTALL ./usr/include make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps' gcc -static -O3 -Wl,-no-as-needed -Wall dmabuf-heap.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap dmabuf-heap.c:16:21: fatal error: drm/drm.h: No such file or directory #include <drm/drm.h> ^ compilation terminated. ../lib.mk:138: recipe for target '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap' failed make[1]: *** [/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap] Error 1 make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps' Makefile:143: recipe for target 'all' failed make: *** [all] Error 2 2019-10-25 16:32:18 make run_tests -C dmabuf-heaps make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps' gcc -static -O3 -Wl,-no-as-needed -Wall dmabuf-heap.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap dmabuf-heap.c:16:21: fatal error: drm/drm.h: No such file or directory #include <drm/drm.h> ^ compilation terminated. ../lib.mk:138: recipe for target '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap' failed make: *** [/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap] Error 1 make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/dmabuf-heaps' ignored_by_lkp efivarfs test: /sys/firmware/efi dir does not exist 2019-10-25 16:32:18 make run_tests -C exec make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec' gcc -Wall -Wno-nonnull -D_GNU_SOURCE execveat.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/execveat execveat.c:8:0: warning: "_GNU_SOURCE" redefined #define _GNU_SOURCE /* to get O_PATH, AT_EMPTY_PATH */
<command-line>:0:0: note: this is the location of the previous definition gcc -Wall -Wno-nonnull -D_GNU_SOURCE recursion-depth.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/recursion-depth cd /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec && ln -s -f execveat execveat.symlink cp /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/execveat /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/execveat.denatured chmod -x /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/execveat.denatured echo '#!/bin/sh' > /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/script echo 'exit $*' >> /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/script chmod +x /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/script mkdir -p /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/subdir TAP version 13 1..2 # selftests: exec: execveat # /bin/sh: 0: Can't open /dev/fd/8/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy # Check success of execveat(5, '../execveat', 0)... [OK] # Check success of execveat(7, 'execveat', 0)... [OK] # Check success of execveat(9, 'execveat', 0)... [OK] # Check success of execveat(-100, '/usr/src/perf_selfte...ftests/exec/execveat', 0)... [OK] # Check success of execveat(99, '/usr/src/perf_selfte...ftests/exec/execveat', 0)... [OK] # Check success of execveat(11, '', 4096)... [OK] # Check success of execveat(20, '', 4096)... [OK] # Check success of execveat(12, '', 4096)... [OK] # Check success of execveat(17, '', 4096)... [OK] # Check success of execveat(17, '', 4096)... [OK] # Check success of execveat(18, '', 4096)... [OK] # Check failure of execveat(11, '', 0) with ENOENT... [OK] # Check failure of execveat(11, '(null)', 4096) with EFAULT... [OK] # Check success of execveat(7, 'execveat.symlink', 0)... [OK] # Check success of execveat(9, 'execveat.symlink', 0)... [OK] # Check success of execveat(-100, '/usr/src/perf_selfte...xec/execveat.symlink', 0)... [OK] # Check success of execveat(13, '', 4096)... [OK] # Check success of execveat(13, '', 4352)... [OK] # Check failure of execveat(7, 'execveat.symlink', 256) with ELOOP... [OK] # Check failure of execveat(9, 'execveat.symlink', 256) with ELOOP... [OK] # Check failure of execveat(-100, '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec/execveat.symlink', 256) with ELOOP... [OK] # Check success of execveat(5, '../script', 0)... [OK] # Check success of execveat(7, 'script', 0)... [OK] # Check success of execveat(9, 'script', 0)... [OK] # Check success of execveat(-100, '/usr/src/perf_selfte...elftests/exec/script', 0)... [OK] # Check success of execveat(16, '', 4096)... [OK] # Check success of execveat(16, '', 4352)... [OK] # Check failure of execveat(21, '', 4096) with ENOENT... [OK] # Check failure of execveat(10, 'script', 0) with ENOENT... [OK] # Check success of execveat(19, '', 4096)... [OK] # Check success of execveat(19, '', 4096)... [OK] # Check success of execveat(6, '../script', 0)... [OK] # Check success of execveat(6, 'script', 0)... [OK] # Check success of execveat(6, '../script', 0)... [OK] # Check failure of execveat(6, 'script', 0) with ENOENT... [OK] # Check failure of execveat(7, 'execveat', 65535) with EINVAL... [OK] # Check failure of execveat(7, 'no-such-file', 0) with ENOENT... [OK] # Check failure of execveat(9, 'no-such-file', 0) with ENOENT... [OK] # Check failure of execveat(-100, 'no-such-file', 0) with ENOENT... [OK] # Check failure of execveat(7, '', 4096) with EACCES... [OK] # Check failure of execveat(7, 'Makefile', 0) with EACCES... [OK] # Check failure of execveat(14, '', 4096) with EACCES... [OK] # Check failure of execveat(15, '', 4096) with EACCES... [OK] # Check failure of execveat(99, '', 4096) with EBADF... [OK] # Check failure of execveat(99, 'execveat', 0) with EBADF... [OK] # Check failure of execveat(11, 'execveat', 0) with ENOTDIR... [OK] # Invoke copy of 'execveat' via filename of length 4094: # Check success of execveat(22, '', 4096)... [OK] # Check success of execveat(8, 'usr/src/perf_selftes...yyyyyyyyyyyyyyyyyyyy', 0)... [OK] # Invoke copy of 'script' via filename of length 4094: # Check success of execveat(23, '', 4096)... [OK] # Check success of execveat(8, 'usr/src/perf_selftes...yyyyyyyyyyyyyyyyyyyy', 0)... [OK] ok 1 selftests: exec: execveat # selftests: exec: recursion-depth ok 2 selftests: exec: recursion-depth make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/exec' ignored_by_lkp filesystems test 2019-10-25 16:32:19 mv /lib/udev/rules.d/50-firmware.rules . 2019-10-25 16:32:19 /etc/init.d/udev restart Restarting udev (via systemctl): udev.service. 2019-10-25 16:32:19 make run_tests -C firmware make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/firmware' TAP version 13 1..1 # selftests: firmware: fw_run_tests.sh # ----------------------------------------------------- # Running kernel configuration test 1 -- rare # Emulates: # CONFIG_FW_LOADER=y # CONFIG_FW_LOADER_USER_HELPER=n # CONFIG_FW_LOADER_USER_HELPER_FALLBACK=n # ./fw_filesystem.sh: filesystem loading works # ./fw_filesystem.sh: async filesystem loading works # # Testing with the file present... # Batched request_firmware() normal try #1: OK # Batched request_firmware() normal try #2: OK # Batched request_firmware() normal try #3: OK # Batched request_firmware() normal try #4: OK # Batched request_firmware() normal try #5: OK # Batched request_firmware_into_buf() normal try #1: OK # Batched request_firmware_into_buf() normal try #2: OK # Batched request_firmware_into_buf() normal try #3: OK # Batched request_firmware_into_buf() normal try #4: OK # Batched request_firmware_into_buf() normal try #5: OK # Batched request_firmware_direct() normal try #1: OK # Batched request_firmware_direct() normal try #2: OK # Batched request_firmware_direct() normal try #3: OK # Batched request_firmware_direct() normal try #4: OK # Batched request_firmware_direct() normal try #5: OK # Batched request_firmware_nowait(uevent=true) normal try #1: OK # Batched request_firmware_nowait(uevent=true) normal try #2: OK # Batched request_firmware_nowait(uevent=true) normal try #3: OK # Batched request_firmware_nowait(uevent=true) normal try #4: OK # Batched request_firmware_nowait(uevent=true) normal try #5: OK # Batched request_firmware_nowait(uevent=false) normal try #1: OK # Batched request_firmware_nowait(uevent=false) normal try #2: OK # Batched request_firmware_nowait(uevent=false) normal try #3: OK # Batched request_firmware_nowait(uevent=false) normal try #4: OK # Batched request_firmware_nowait(uevent=false) normal try #5: OK # # Testing with the file missing... # Batched request_firmware() nofile try #1: OK # Batched request_firmware() nofile try #2: OK # Batched request_firmware() nofile try #3: OK # Batched request_firmware() nofile try #4: OK # Batched request_firmware() nofile try #5: OK # Batched request_firmware_into_buf() nofile try #1: OK # Batched request_firmware_into_buf() nofile try #2: OK # Batched request_firmware_into_buf() nofile try #3: OK # Batched request_firmware_into_buf() nofile try #4: OK # Batched request_firmware_into_buf() nofile try #5: OK # Batched request_firmware_direct() nofile try #1: OK # Batched request_firmware_direct() nofile try #2: OK # Batched request_firmware_direct() nofile try #3: OK # Batched request_firmware_direct() nofile try #4: OK # Batched request_firmware_direct() nofile try #5: OK # Batched request_firmware_nowait(uevent=true) nofile try #1: OK # Batched request_firmware_nowait(uevent=true) nofile try #2: OK # Batched request_firmware_nowait(uevent=true) nofile try #3: OK # Batched request_firmware_nowait(uevent=true) nofile try #4: OK # Batched request_firmware_nowait(uevent=true) nofile try #5: OK # Batched request_firmware_nowait(uevent=false) nofile try #1: OK # Batched request_firmware_nowait(uevent=false) nofile try #2: OK # Batched request_firmware_nowait(uevent=false) nofile try #3: OK # Batched request_firmware_nowait(uevent=false) nofile try #4: OK # Batched request_firmware_nowait(uevent=false) nofile try #5: OK # usermode helper disabled so ignoring test # ----------------------------------------------------- # Running kernel configuration test 2 -- distro # Emulates: # CONFIG_FW_LOADER=y # CONFIG_FW_LOADER_USER_HELPER=y # CONFIG_FW_LOADER_USER_HELPER_FALLBACK=n # ./fw_filesystem.sh: timeout works # ./fw_filesystem.sh: filesystem loading works # ./fw_filesystem.sh: async filesystem loading works # # Testing with the file present... # Batched request_firmware() normal try #1: OK # Batched request_firmware() normal try #2: OK # Batched request_firmware() normal try #3: OK # Batched request_firmware() normal try #4: OK # Batched request_firmware() normal try #5: OK # Batched request_firmware_into_buf() normal try #1: OK # Batched request_firmware_into_buf() normal try #2: OK # Batched request_firmware_into_buf() normal try #3: OK # Batched request_firmware_into_buf() normal try #4: OK # Batched request_firmware_into_buf() normal try #5: OK # Batched request_firmware_direct() normal try #1: OK # Batched request_firmware_direct() normal try #2: OK # Batched request_firmware_direct() normal try #3: OK # Batched request_firmware_direct() normal try #4: OK # Batched request_firmware_direct() normal try #5: OK # Batched request_firmware_nowait(uevent=true) normal try #1: OK # Batched request_firmware_nowait(uevent=true) normal try #2: not ok 1 selftests: firmware: fw_run_tests.sh # TIMEOUT make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/firmware' 2019-10-25 16:33:06 mv 50-firmware.rules /lib/udev/rules.d/50-firmware.rules 2019-10-25 16:33:06 make run_tests -C ftrace make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ftrace' TAP version 13 1..1 # selftests: ftrace: ftracetest # === Ftrace unit tests === # [1] Basic trace file check [PASS] # [2] Basic test for tracers [PASS] # [3] Basic trace clock test [PASS] # [4] Basic event tracing check [PASS] # [5] Change the ringbuffer size [PASS] # [6] Snapshot and tracing setting [PASS] # [7] trace_pipe and trace_marker [PASS] # [8] Generic dynamic event - add/remove kprobe events [PASS] # [9] Generic dynamic event - add/remove synthetic events [PASS] # [10] Generic dynamic event - selective clear (compatibility) [PASS] # [11] Generic dynamic event - generic clear event [PASS] # [12] event tracing - enable/disable with event level files [PASS] # [13] event tracing - restricts events based on pid [PASS] # [14] event tracing - enable/disable with subsystem level files [PASS] # [15] event tracing - enable/disable with top level files [PASS] # [16] Test trace_printk from module [UNRESOLVED] # [17] ftrace - function graph filters with stack tracer [PASS] # [18] ftrace - function graph filters [PASS] # [19] ftrace - function glob filters [PASS] # [20] ftrace - function pid filters [PASS] # [21] ftrace - stacktrace filter command [PASS] # [22] ftrace - function trace with cpumask [PASS] # [23] ftrace - test for function event triggers [PASS] # [24] ftrace - function trace on module [UNRESOLVED] # [25] ftrace - function profiling [PASS] # [26] ftrace - function profiler with function tracing [PASS] # [27] ftrace - test reading of set_ftrace_filter [PASS] # [28] ftrace - Max stack tracer [PASS] # [29] ftrace - test for function traceon/off triggers [PASS] # [30] ftrace - test tracing error log support [PASS] # [31] Test creation and deletion of trace instances while setting an event [PASS] # [32] Test creation and deletion of trace instances [PASS] # [33] Kprobe dynamic event - adding and removing [PASS] # [34] Kprobe dynamic event - busy event check [PASS] # [35] Kprobe dynamic event with arguments [PASS] # [36] Kprobe event with comm arguments [PASS] # [37] Kprobe event string type argument [PASS] # [38] Kprobe event symbol argument [PASS] # [39] Kprobe event argument syntax [PASS] # [40] Kprobes event arguments with types [PASS] # [41] Kprobe event user-memory access [PASS] # [42] Kprobe event auto/manual naming [PASS] # [43] Kprobe dynamic event with function tracer [PASS] # [44] Kprobe dynamic event - probing module [UNRESOLVED] # [45] Create/delete multiprobe on kprobe event [PASS] # [46] Kprobe event parser error log check [FAIL] # [47] Kretprobe dynamic event with arguments [PASS] # [48] Kretprobe dynamic event with maxactive [PASS] # [49] Register/unregister many kprobe eventsnot ok 1 selftests: ftrace: ftracetest # TIMEOUT make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ftrace' 2019-10-25 16:34:08 make run_tests -C futex make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex' make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional' make --no-builtin-rules INSTALL_HDR_PATH=$OUTPUT/usr \ ARCH=x86 -C ../../../../.. headers_install make[2]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' INSTALL /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional/usr/include make[2]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' gcc -g -O2 -Wall -D_GNU_SOURCE -pthread -I../include -I../../ -pthread -lrt futex_wait_timeout.c ../include/futextest.h ../include/atomic.h ../include/logging.h -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional/futex_wait_timeout gcc -g -O2 -Wall -D_GNU_SOURCE -pthread -I../include -I../../ -pthread -lrt futex_wait_wouldblock.c ../include/futextest.h ../include/atomic.h ../include/logging.h -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional/futex_wait_wouldblock gcc -g -O2 -Wall -D_GNU_SOURCE -pthread -I../include -I../../ -pthread -lrt futex_requeue_pi.c ../include/futextest.h ../include/atomic.h ../include/logging.h -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional/futex_requeue_pi gcc -g -O2 -Wall -D_GNU_SOURCE -pthread -I../include -I../../ -pthread -lrt futex_requeue_pi_signal_restart.c ../include/futextest.h ../include/atomic.h ../include/logging.h -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional/futex_requeue_pi_signal_restart gcc -g -O2 -Wall -D_GNU_SOURCE -pthread -I../include -I../../ -pthread -lrt futex_requeue_pi_mismatched_ops.c ../include/futextest.h ../include/atomic.h ../include/logging.h -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional/futex_requeue_pi_mismatched_ops gcc -g -O2 -Wall -D_GNU_SOURCE -pthread -I../include -I../../ -pthread -lrt futex_wait_uninitialized_heap.c ../include/futextest.h ../include/atomic.h ../include/logging.h -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional/futex_wait_uninitialized_heap gcc -g -O2 -Wall -D_GNU_SOURCE -pthread -I../include -I../../ -pthread -lrt futex_wait_private_mapped_file.c ../include/futextest.h ../include/atomic.h ../include/logging.h -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional/futex_wait_private_mapped_file make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex/functional' TAP version 13 1..1 # selftests: futex: run.sh # # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=0 owner=0 timeout=0ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=0 owner=0 timeout=0ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=1 owner=0 timeout=0ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=0 owner=1 timeout=0ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=1 owner=0 timeout=0ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=0 owner=1 timeout=0ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=1 owner=0 timeout=5000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=1 owner=0 timeout=5000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=1 owner=0 timeout=500000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=1 owner=0 timeout=500000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=0 owner=0 timeout=5000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=0 owner=0 timeout=5000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=0 owner=0 timeout=500000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=0 owner=0 timeout=500000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=0 owner=1 timeout=5000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=1 owner=0 timeout=5000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=0 owner=1 timeout=500000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=1 owner=0 timeout=500000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=1 locked=1 owner=0 timeout=2000000000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_requeue_pi: Test requeue functionality # # Arguments: broadcast=0 locked=1 owner=0 timeout=2000000000ns # ok 1 futex-requeue-pi # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # # TAP version 13 # 1..1 # # futex_requeue_pi_mismatched_ops: Detect mismatched requeue_pi operations # ok 1 futex-requeue-pi-mismatched-ops # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # # TAP version 13 # 1..1 # # futex_requeue_pi_signal_restart: Test signal handling during requeue_pi # # Arguments: <none> # ok 1 futex-requeue-pi-signal-restart # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # # TAP version 13 # 1..1 # # futex_wait_timeout: Block on a futex and wait for timeout # # Arguments: timeout=100000ns # ok 1 futex-wait-timeout # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # # TAP version 13 # 1..1 # # futex_wait_wouldblock: Test the unexpected futex value in FUTEX_WAIT # ok 1 futex-wait-wouldblock # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # # TAP version 13 # 1..1 # # futex_wait_uninitialized_heap: Test the uninitialized futex value in FUTEX_WAIT # ok 1 futex-wait-uninitialized-heap # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # TAP version 13 # 1..1 # # futex_wait_private_mapped_file: Test the futex value of private file mappings in FUTEX_WAIT # ok 1 futex-wait-private-mapped-file # # Pass 1 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 ok 1 selftests: futex: run.sh make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/futex' 2019-10-25 16:34:21 make run_tests -C gpio make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/gpio' make OUTPUT=/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/ -C /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio' mkdir -p /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/include/linux 2>&1 || true ln -sf /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/../../include/uapi/linux/gpio.h /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/include/linux/gpio.h make -f /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/build/Makefile.build dir=. obj=lsgpio make[2]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio' CC /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/lsgpio.o CC /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/gpio-utils.o LD /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/lsgpio-in.o make[2]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio' LINK /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/lsgpio make -f /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/build/Makefile.build dir=. obj=gpio-hammer make[2]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio' CC /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/gpio-hammer.o LD /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/gpio-hammer-in.o make[2]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio' LINK /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/gpio-hammer make -f /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/build/Makefile.build dir=. obj=gpio-event-mon make[2]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio' CC /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/gpio-event-mon.o LD /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/gpio-event-mon-in.o make[2]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio' LINK /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/gpio-event-mon make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio' gcc -O2 -g -std=gnu99 -Wall -I../../../../usr/include/ -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/uuid gpio-mockup-chardev.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/gpio/gpio-utils.o -lmount -o gpio-mockup-chardev make --no-builtin-rules ARCH=x86 -C ../../../.. headers_install make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' INSTALL ./usr/include make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' TAP version 13 1..1 # selftests: gpio: gpio-mockup.sh # 1. Test dynamic allocation of gpio successful means insert gpiochip and # manipulate gpio pin successful # GPIO gpio-mockup test with ranges: <-1,32>: # -1,32 # gpio<gpio-mockup> test failed # Test gpiochip gpio-mockup: GPIO gpio-mockup test with ranges: <-1,32,-1,32>: # -1,32,-1,32 # gpio<gpio-mockup> test failed # Test gpiochip gpio-mockup: GPIO gpio-mockup test with ranges: <-1,32,-1,32,-1,32>: # -1,32,-1,32,-1,32 # gpio<gpio-mockup> test failed # Test gpiochip gpio-mockup: 3. Error test: successful means insert gpiochip failed # 3.1 Test number of gpio overflow # GPIO gpio-mockup test with ranges: <-1,32,-1,1024>: # -1,32,-1,1024 # Test gpiochip gpio-mockup: Invalid test successful # GPIO test PASS ok 1 selftests: gpio: gpio-mockup.sh make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/gpio' ia64 test: not in Makefile 2019-10-25 16:34:22 make TARGETS=ia64 make --no-builtin-rules ARCH=x86 -C ../../.. headers_install make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' INSTALL ./usr/include make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ia64' Makefile:9: warning: overriding recipe for target 'clean' ../lib.mk:123: warning: ignoring old recipe for target 'clean' gcc aliasing-test.c -o aliasing-test make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ia64' 2019-10-25 16:34:24 make run_tests -C ia64 make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ia64' Makefile:9: warning: overriding recipe for target 'clean' ../lib.mk:123: warning: ignoring old recipe for target 'clean' TAP version 13 1..1 # selftests: ia64: aliasing-test # PASS: /dev/mem 0x0-0xa0000 is readable # PASS: /dev/mem 0xa0000-0xc0000 is mappable # PASS: /dev/mem 0xc0000-0x100000 is readable # PASS: /dev/mem 0x0-0x100000 is mappable # PASS: /sys/devices/pci0000:00/0000:00:02.0/rom read 39422 bytes # PASS: /sys/devices/pci0000:00/0000:00:03.0/rom read 231422 bytes # PASS: /proc/bus/pci/00/00.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/01.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/01.1 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/01.3 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/02.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/03.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/04.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/05.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/06.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/07.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/08.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/09.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/0a.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/0b.0 0x0-0xa0000 not mappable # PASS: /proc/bus/pci/00/00.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/01.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/01.1 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/01.3 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/02.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/03.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/04.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/05.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/06.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/07.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/08.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/09.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/0a.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/0b.0 0xa0000-0xc0000 not mappable # PASS: /proc/bus/pci/00/00.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/01.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/01.1 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/01.3 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/02.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/03.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/04.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/05.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/06.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/07.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/08.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/09.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/0a.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/0b.0 0xc0000-0x100000 not mappable # PASS: /proc/bus/pci/00/00.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/01.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/01.1 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/01.3 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/02.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/03.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/04.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/05.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/06.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/07.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/08.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/09.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/0a.0 0x0-0x100000 not mappable # PASS: /proc/bus/pci/00/0b.0 0x0-0x100000 not mappable ok 1 selftests: ia64: aliasing-test make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ia64' 2019-10-25 16:34:25 make run_tests -C intel_pstate make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/intel_pstate' gcc -Wall -D_GNU_SOURCE msr.c -lm -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/intel_pstate/msr gcc -Wall -D_GNU_SOURCE aperf.c -lm -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/intel_pstate/aperf TAP version 13 1..1 # selftests: intel_pstate: run.sh # cpupower: error while loading shared libraries: libcpupower.so.0: cannot open shared object file: No such file or directory # ./run.sh: line 90: / 1000: syntax error: operand expected (error token is "/ 1000") # cpupower: error while loading shared libraries: libcpupower.so.0: cannot open shared object file: No such file or directory # ./run.sh: line 92: / 1000: syntax error: operand expected (error token is "/ 1000") # ======================================================================== # The marketing frequency of the cpu is 0 MHz # The maximum frequency of the cpu is MHz # The minimum frequency of the cpu is MHz # Target Actual Difference MSR(0x199) max_perf_pct ok 1 selftests: intel_pstate: run.sh make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/intel_pstate' 2019-10-25 16:34:25 make run_tests -C ipc make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ipc' gcc -DCONFIG_X86_64 -D__x86_64__ -I../../../../usr/include/ msgque.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ipc/msgque TAP version 13 1..1 # selftests: ipc: msgque # # Pass 0 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 ok 1 selftests: ipc: msgque make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ipc' ignored_by_lkp ir.ir_loopback_rcmm tests 2019-10-25 16:34:25 make run_tests -C ir make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ir' gcc -Wall -O2 -I../../../include/uapi ir_loopback.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ir/ir_loopback TAP version 13 1..1 # selftests: ir: ir_loopback.sh # Sending IR on rc0 and receiving IR on rc0. # Testing protocol rc-5 for decoder rc-5 (1/18)... # Testing scancode:1f2a # Testing scancode:1252 # Testing scancode:1614 # Testing scancode:b56 # Testing scancode:e14 # Testing scancode:1120 # Testing scancode:652 # Testing scancode:b15 # Testing scancode:146b # Testing scancode:a73 # OK # Testing protocol rc-5x-20 for decoder rc-5 (2/18)... # Testing scancode:84a37 # Testing scancode:1b7311 # Testing scancode:1d1218 # Testing scancode:1f6c19 # Testing scancode:e5b01 # Testing scancode:94622 # Testing scancode:8030e # Testing scancode:13411b # Testing scancode:c6313 # Testing scancode:87b13 # OK # Testing protocol rc-5-sz for decoder rc-5-sz (3/18)... # Testing scancode:82b # Testing scancode:2c7f # Testing scancode:e85 # Testing scancode:159 # Testing scancode:543 # Testing scancode:f5b # Testing scancode:15a # Testing scancode:235f # Testing scancode:23b0 # Testing scancode:531 # OK # Testing protocol jvc for decoder jvc (4/18)... # Testing scancode:58af # Testing scancode:835a # Testing scancode:8804 # Testing scancode:8f43 # Testing scancode:f31 # Testing scancode:5618 # Testing scancode:4063 # Testing scancode:7603 # Testing scancode:21ae # Testing scancode:754f # OK # Testing protocol sony-12 for decoder sony (5/18)... # Testing scancode:76 # Testing scancode:1e0025 # Testing scancode:e0060 # Testing scancode:1d000f # Testing scancode:1d007e # Testing scancode:1d0061 # Testing scancode:70031 # Testing scancode:6004c # Testing scancode:10003d # Testing scancode:140044 # OK # Testing protocol sony-15 for decoder sony (6/18)... # Testing scancode:ce001f # Testing scancode:840068 # Testing scancode:760043 # Testing scancode:3c0025 # Testing scancode:9b0041 # Testing scancode:ee0006 # Testing scancode:2f0000 # Testing scancode:12001c # Testing scancode:320066 # Testing scancode:870031 # OK # Testing protocol sony-20 for decoder sony (7/18)... # Testing scancode:12464d # Testing scancode:c6b15 # Testing scancode:1dfd0b # Testing scancode:6ce51 # Testing scancode:afa59 # Testing scancode:120c3c # Testing scancode:f246a # Testing scancode:183a3c # Testing scancode:16823f # Testing scancode:54618 # OK # Testing protocol nec for decoder nec (8/18)... # Testing scancode:b00b # Testing scancode:e336 # Testing scancode:b2bd # Testing scancode:18eb # Testing scancode:d645 # Testing scancode:8bbb # Testing scancode:5d4d # Testing scancode:ff6 # Testing scancode:e887 # Testing scancode:e38a # OK # Testing protocol nec-x for decoder nec (9/18)... # Testing scancode:d02d3a # Testing scancode:96c0a7 # Testing scancode:eb01f2 # Testing scancode:46b6fd # Testing scancode:d2f74c # Testing scancode:8661b3 # Testing scancode:34d603 # Testing scancode:2cd4c # Testing scancode:9912cf # Testing scancode:66e869 # OK # Testing protocol nec-32 for decoder nec (10/18)... # Testing scancode:6d8a46fd # Testing scancode:61ab591d # Testing scancode:3113537f # Testing scancode:6f684409 # Testing scancode:2bf2276e # Testing scancode:ade4dd8 # Testing scancode:231a5045 # Testing scancode:62a14bd8 # Testing scancode:52968894 # Testing scancode:4670d285 # OK # Testing protocol sanyo for decoder sanyo (11/18)... # Testing scancode:691f0 # Testing scancode:138a0 # Testing scancode:7b5bb # Testing scancode:a44ad # Testing scancode:1a518b # Testing scancode:1c8c00 # Testing scancode:bd068 # Testing scancode:10aed8 # Testing scancode:189bf6 # Testing scancode:13b8f0 # OK # Testing protocol rc-6-0 for decoder rc-6 (12/18)... # Testing scancode:9262 # Testing scancode:c930 # Testing scancode:7997 # Testing scancode:9454 # Testing scancode:802d # Testing scancode:70e3 # Testing scancode:f608 # Testing scancode:5630 # Testing scancode:3e2f # Testing scancode:8d7 # OK # Testing protocol rc-6-6a-20 for decoder rc-6 (13/18)... # Testing scancode:b3e9a # Testing scancode:a852d # Testing scancode:d61f4 # Testing scancode:e9219 # Testing scancode:2c936 # Testing scancode:f8963 # Testing scancode:cdff1 # Testing scancode:d197b # Testing scancode:d53b # Testing scancode:36885 # OK # Testing protocol rc-6-6a-24 for decoder rc-6 (14/18)... # Testing scancode:ddec00 # Testing scancode:27672c # Testing scancode:54a125 # Testing scancode:c5a1bb # Testing scancode:91abd9 # Testing scancode:4ef2b1 # Testing scancode:222dbb # Testing scancode:bd7c42 # Testing scancode:dfa189 # Testing scancode:3ac9b1 # OK # Testing protocol rc-6-6a-32 for decoder rc-6 (15/18)... # Testing scancode:16b13532 # Testing scancode:7ed733ec # Testing scancode:452392e1 # Testing scancode:7b3baec9 # Testing scancode:33b9c840 # Testing scancode:6153130e # Testing scancode:1b991fac # Testing scancode:f22be48 # Testing scancode:43b7693f # Testing scancode:49f95ddb # OK # Testing protocol rc-6-mce for decoder rc-6 (16/18)... # Testing scancode:800f4720 # Testing scancode:800f27d9 # Testing scancode:800f6308 # Testing scancode:800f2914 # Testing scancode:800f39f2 # Testing scancode:800f2c3e # Testing scancode:800f3277 # Testing scancode:800f19e3 # Testing scancode:800f45ba # Testing scancode:800f07b3 # OK # Testing protocol sharp for decoder sharp (17/18)... # Testing scancode:268 # Testing scancode:11ba # Testing scancode:edf # Testing scancode:38e # Testing scancode:1376 # Testing scancode:1ab8 # Testing scancode:163f # Testing scancode:131 # Testing scancode:16fa # Testing scancode:17c8 # OK # Testing protocol imon for decoder imon (18/18)... # Testing scancode:2ea44ae3 # Testing scancode:6cda4c2c # Testing scancode:21cbebb4 # Testing scancode:73c7ddc4 # Testing scancode:6815faf5 # Testing scancode:5585b3f5 # Testing scancode:551af0d3 # Testing scancode:3af1aa1 # Testing scancode:64a8723d # Testing scancode:18d25a12 # OK # # Planned tests != run tests (0 != 180) # # Pass 180 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 ok 1 selftests: ir: ir_loopback.sh make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/ir' 2019-10-25 16:34:35 make run_tests -C kcmp make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kcmp' gcc -I../../../../usr/include/ kcmp_test.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kcmp/kcmp_test TAP version 13 1..1 # selftests: kcmp: kcmp_test # pid1: 17536 pid2: 17537 FD: 1 FILES: 2 VM: 1 FS: 2 SIGHAND: 1 IO: 0 SYSVSEM: 0 INV: -1 # PASS: 0 returned as expected # PASS: 0 returned as expected # PASS: 0 returned as expected # # Planned tests != run tests (0 != 3) # # Pass 3 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # # Planned tests != run tests (0 != 3) # # Pass 3 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 # # Pass 0 Fail 0 Xfail 0 Xpass 0 Skip 0 Error 0 ok 1 selftests: kcmp: kcmp_test make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kcmp' 2019-10-25 16:34:35 make run_tests -C kexec make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kexec' TAP version 13 1..2 # selftests: kexec: test_kexec_load.sh # [INFO] kexec_load is enabled # [INFO] IMA enabled # [INFO] efivars is not mounted on /sys/firmware/efi/efivars # efi_vars is not enabled # not ok 1 selftests: kexec: test_kexec_load.sh # SKIP # selftests: kexec: test_kexec_file_load.sh # [INFO] kexec_file_load is enabled # [INFO] IMA enabled # [INFO] efivars is not mounted on /sys/firmware/efi/efivars # efi_vars is not enabled # not ok 2 selftests: kexec: test_kexec_file_load.sh # SKIP make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kexec' kmod test: not in Makefile 2019-10-25 16:34:36 make TARGETS=kmod make --no-builtin-rules ARCH=x86 -C ../../.. headers_install make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' INSTALL ./usr/include make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kmod' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kmod' 2019-10-25 16:34:36 make run_tests -C kmod make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kmod' TAP version 13 1..1 # selftests: kmod: kmod.sh # Fri Oct 25 16:34:37 CST 2019 # Running test: kmod_test_0001 - run #0 # kmod_test_0001_driver: OK! - loading kmod test # kmod_test_0001_driver: OK! - Return value: 256 (MODULE_NOT_FOUND), expected MODULE_NOT_FOUND # kmod_test_0001_fs: OK! - loading kmod test # kmod_test_0001_fs: OK! - Return value: -22 (-EINVAL), expected -EINVAL # Fri Oct 25 16:34:37 CST 2019 # Running test: kmod_test_0001 - run #1 # kmod_test_0001_driver: OK! - loading kmod test # kmod_test_0001_driver: OK! - Return value: 256 (MODULE_NOT_FOUND), expected MODULE_NOT_FOUND # kmod_test_0001_fs: OK! - loading kmod test # kmod_test_0001_fs: OK! - Return value: -22 (-EINVAL), expected -EINVAL # Fri Oct 25 16:34:37 CST 2019 # Running test: kmod_test_0001 - run #2 # kmod_test_0001_driver: OK! - loading kmod test # kmod_test_0001_driver: OK! - Return value: 256 (MODULE_NOT_FOUND), expected MODULE_NOT_FOUND # kmod_test_0001_fs: OK! - loading kmod test # kmod_test_0001_fs: OK! - Return value: -22 (-EINVAL), expected -EINVAL # Fri Oct 25 16:34:37 CST 2019 # Running test: kmod_test_0002 - run #0 # kmod_test_0002_driver: OK! - loading kmod test # kmod_test_0002_driver: OK! - Return value: 256 (MODULE_NOT_FOUND), expected MODULE_NOT_FOUND # kmod_test_0002_fs: OK! - loading kmod test # kmod_test_0002_fs: OK! - Return value: -22 (-EINVAL), expected -EINVAL # Fri Oct 25 16:34:37 CST 2019 # Running test: kmod_test_0002 - run #1 # kmod_test_0002_driver: OK! - loading kmod test # kmod_test_0002_driver: OK! - Return value: 256 (MODULE_NOT_FOUND), expected MODULE_NOT_FOUND # kmod_test_0002_fs: OK! - loading kmod test # kmod_test_0002_fs: OK! - Return value: -22 (-EINVAL), expected -EINVAL # Fri Oct 25 16:34:37 CST 2019 # Running test: kmod_test_0002 - run #2 # kmod_test_0002_driver: OK! - loading kmod test # kmod_test_0002_driver: OK! - Return value: 256 (MODULE_NOT_FOUND), expected MODULE_NOT_FOUND # kmod_test_0002_fs: OK! - loading kmod test # kmod_test_0002_fs: OK! - Return value: -22 (-EINVAL), expected -EINVAL # Fri Oct 25 16:34:37 CST 2019 # Running test: kmod_test_0003 - run #0 # kmod_test_0003: OK! - loading kmod test # kmod_test_0003: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:37 CST 2019 # Running test: kmod_test_0004 - run #0 # kmod_test_0004: OK! - loading kmod test # kmod_test_0004: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:37 CST 2019 # Running test: kmod_test_0005 - run #0 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:38 CST 2019 # Running test: kmod_test_0005 - run #1 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:38 CST 2019 # Running test: kmod_test_0005 - run #2 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:38 CST 2019 # Running test: kmod_test_0005 - run #3 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:38 CST 2019 # Running test: kmod_test_0005 - run #4 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:38 CST 2019 # Running test: kmod_test_0005 - run #5 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:38 CST 2019 # Running test: kmod_test_0005 - run #6 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:38 CST 2019 # Running test: kmod_test_0005 - run #7 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:38 CST 2019 # Running test: kmod_test_0005 - run #8 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:39 CST 2019 # Running test: kmod_test_0005 - run #9 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:39 CST 2019 # Running test: kmod_test_0006 - run #0 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:41 CST 2019 # Running test: kmod_test_0006 - run #1 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:43 CST 2019 # Running test: kmod_test_0006 - run #2 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:44 CST 2019 # Running test: kmod_test_0006 - run #3 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:46 CST 2019 # Running test: kmod_test_0006 - run #4 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:47 CST 2019 # Running test: kmod_test_0006 - run #5 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:47 CST 2019 # Running test: kmod_test_0006 - run #6 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:49 CST 2019 # Running test: kmod_test_0006 - run #7 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:49 CST 2019 # Running test: kmod_test_0006 - run #8 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:50 CST 2019 # Running test: kmod_test_0006 - run #9 # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:51 CST 2019 # Running test: kmod_test_0007 - run #0 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:55 CST 2019 # Running test: kmod_test_0007 - run #1 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:34:58 CST 2019 # Running test: kmod_test_0007 - run #2 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:35:01 CST 2019 # Running test: kmod_test_0007 - run #3 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # Fri Oct 25 16:35:05 CST 2019 # Running test: kmod_test_0007 - run #4 # kmod_test_0005: OK! - loading kmod test # kmod_test_0005: OK! - Return value: 0 (SUCCESS), expected SUCCESS # kmod_test_0006: OK! - loading kmod test # kmod_test_0006: OK! - Return value: 0 (SUCCESS), expected SUCCESS # ./kmod.sh: line 529: [[: 1 0002:3:1 0003:1:1 0004:1:1 0005:10:1 0006:10:1 0007:5:1 0008:150:1 0009:150:1: syntax error in expression (error token is "0002:3:1 0003:1:1 0004:1:1 0005:10:1 0006:10:1 0007:5:1 0008:150:1 0009:150:1") # ./kmod.sh: line 529: [[: 1 0002:3:1 0003:1:1 0004:1:1 0005:10:1 0006:10:1 0007:5:1 0008:150:1 0009:150:1: syntax error in expression (error token is "0002:3:1 0003:1:1 0004:1:1 0005:10:1 0006:10:1 0007:5:1 0008:150:1 0009:150:1") # Test completed ok 1 selftests: kmod: kmod.sh make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kmod' 2019-10-25 16:35:08 make run_tests -C kvm make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm' make --no-builtin-rules ARCH=x86 -C ../../../.. headers_install make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' INSTALL ./usr/include make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ilib -Iinclude/x86_64 -I.. -c lib/assert.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/assert.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ilib -Iinclude/x86_64 -I.. -c lib/elf.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/elf.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ilib -Iinclude/x86_64 -I.. -c lib/io.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/io.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ilib -Iinclude/x86_64 -I.. -c lib/kvm_util.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/kvm_util.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ilib -Iinclude/x86_64 -I.. -c lib/sparsebit.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/sparsebit.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ilib/x86_64 -Iinclude/x86_64 -I.. -c lib/x86_64/processor.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/x86_64/processor.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ilib/x86_64 -Iinclude/x86_64 -I.. -c lib/x86_64/vmx.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/x86_64/vmx.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ilib/x86_64 -Iinclude/x86_64 -I.. -c lib/x86_64/ucall.c -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/x86_64/ucall.o ar crs /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/assert.o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/elf.o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/io.o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/kvm_util.o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/sparsebit.o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/x86_64/processor.o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/x86_64/vmx.o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/lib/x86_64/ucall.o gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/cr4_cpuid_sync_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/cr4_cpuid_sync_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/evmcs_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/evmcs_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/hyperv_cpuid.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/hyperv_cpuid gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/mmio_warning_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/mmio_warning_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/platform_info_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/platform_info_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/set_sregs_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/set_sregs_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/smm_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/smm_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/state_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/state_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/sync_regs_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/sync_regs_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/vmx_close_while_nested_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/vmx_close_while_nested_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/vmx_dirty_log_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/vmx_dirty_log_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/vmx_set_nested_state_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/vmx_set_nested_state_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -Ix86_64 -Iinclude/x86_64 -I.. -pthread -no-pie x86_64/vmx_tsc_adjust_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/x86_64/vmx_tsc_adjust_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -I. -Iinclude/x86_64 -I.. -pthread -no-pie clear_dirty_log_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/clear_dirty_log_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -I. -Iinclude/x86_64 -I.. -pthread -no-pie dirty_log_test.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/dirty_log_test gcc -Wall -Wstrict-prototypes -Wuninitialized -O2 -g -std=gnu99 -fno-stack-protector -fno-PIE -I../../../../tools/include -I../../../../usr/include/ -Iinclude -I. -Iinclude/x86_64 -I.. -pthread -no-pie kvm_create_max_vcpus.c /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/libkvm.a -o /usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm/kvm_create_max_vcpus TAP version 13 1..16 # selftests: kvm: cr4_cpuid_sync_test not ok 1 selftests: kvm: cr4_cpuid_sync_test # SKIP # selftests: kvm: evmcs_test # Testing guest mode: PA-bits:ANY, VA-bits:48, 4K pages not ok 2 selftests: kvm: evmcs_test # SKIP # selftests: kvm: hyperv_cpuid not ok 3 selftests: kvm: hyperv_cpuid # SKIP # selftests: kvm: mmio_warning_test # ==== Test Assertion Failure ==== # lib/kvm_util.c:1642: f != NULL # pid=22848 tid=22848 - No such file or directory # 1 0x0000000000403cce: vm_is_unrestricted_guest at kvm_util.c:1641 # 2 0x00000000004011e7: main at mmio_warning_test.c:100 # 3 0x00007f723a5fbbba: ?? ??:0 # 4 0x00000000004012c9: _start at ??:? # Error in opening KVM dev file: 2 not ok 4 selftests: kvm: mmio_warning_test # exit=254 # selftests: kvm: platform_info_test not ok 5 selftests: kvm: platform_info_test # SKIP # selftests: kvm: set_sregs_test # Testing guest mode: PA-bits:ANY, VA-bits:48, 4K pages not ok 6 selftests: kvm: set_sregs_test # SKIP # selftests: kvm: smm_test # Testing guest mode: PA-bits:ANY, VA-bits:48, 4K pages not ok 7 selftests: kvm: smm_test # SKIP # selftests: kvm: state_test # Testing guest mode: PA-bits:ANY, VA-bits:48, 4K pages not ok 8 selftests: kvm: state_test # SKIP # selftests: kvm: sync_regs_test not ok 9 selftests: kvm: sync_regs_test # SKIP # selftests: kvm: vmx_close_while_nested_test not ok 10 selftests: kvm: vmx_close_while_nested_test # SKIP # selftests: kvm: vmx_dirty_log_test # Testing guest mode: PA-bits:ANY, VA-bits:48, 4K pages not ok 11 selftests: kvm: vmx_dirty_log_test # SKIP # selftests: kvm: vmx_set_nested_state_test not ok 12 selftests: kvm: vmx_set_nested_state_test # SKIP # selftests: kvm: vmx_tsc_adjust_test not ok 13 selftests: kvm: vmx_tsc_adjust_test # SKIP # selftests: kvm: clear_dirty_log_test not ok 14 selftests: kvm: clear_dirty_log_test # SKIP # selftests: kvm: dirty_log_test # Test iterations: 32, interval: 10 (ms) # Testing guest mode: PA-bits:ANY, VA-bits:48, 4K pages not ok 15 selftests: kvm: dirty_log_test # SKIP # selftests: kvm: kvm_create_max_vcpus not ok 16 selftests: kvm: kvm_create_max_vcpus # SKIP make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/kvm' 2019-10-25 16:35:13 make run_tests -C lib make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/lib' TAP version 13 1..4 # selftests: lib: printf.sh # printf: ok ok 1 selftests: lib: printf.sh # selftests: lib: bitmap.sh # bitmap: ok ok 2 selftests: lib: bitmap.sh # selftests: lib: prime_numbers.sh # prime numbers: ok ok 3 selftests: lib: prime_numbers.sh # selftests: lib: strscpy.sh # strscpy*: ok ok 4 selftests: lib: strscpy.sh make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/lib' locking test: not in Makefile 2019-10-25 16:35:14 make TARGETS=locking make --no-builtin-rules ARCH=x86 -C ../../.. headers_install make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' INSTALL ./usr/include make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b' make[1]: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/locking' make[1]: Nothing to be done for 'all'. make[1]: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/locking' 2019-10-25 16:35:14 make run_tests -C locking make: Entering directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/locking' TAP version 13 1..1 # selftests: locking: ww_mutex.sh # locking/ww_mutex: ok ok 1 selftests: locking: ww_mutex.sh make: Leaving directory '/usr/src/perf_selftests-x86_64-rhel-7.6-475bfb4b00bc0f91400ac501f7edf16b595cd61b/tools/testing/selftests/locking'
To reproduce:
# build kernel cd linux cp config-5.4.0-rc4-00042-g475bfb4b00bc0 .config make HOSTCC=gcc-7 CC=gcc-7 ARCH=x86_64 olddefconfig prepare modules_prepare bzImage
git clone https://github.com/intel/lkp-tests.git cd lkp-tests bin/lkp qemu -k <bzImage> job-script # job-script is attached in this email
Thanks, Oliver Sang
On Mon, Oct 21, 2019 at 12:03 PM John Stultz john.stultz@linaro.org wrote:
Lucky number 13! :)
Last week in v12 I had re-added some symbol exports to support later patches I have pending to enable loading heaps from modules. He reminded me that back around v3 (its been awhile!) I
By "He" I mean Brian here.
thanks -john
Hi John,
On 21/10/2019 21:03, John Stultz wrote:
Lucky number 13! :)
Last week in v12 I had re-added some symbol exports to support later patches I have pending to enable loading heaps from modules. He reminded me that back around v3 (its been awhile!) I had removed those exports due to concerns about the fact that we don't support module removal.
So I'm respinning the patches, removing the exports again. I'll submit a patch to re-add them in a later series enabling moduels which can be reviewed indepently.
With that done, lets get on to the boilerplate!
The patchset implements per-heap devices which can be opened directly and then an ioctl is used to allocate a dmabuf from the heap.
The interface is similar, but much simpler then IONs, only providing an ALLOC ioctl.
Also, I've provided relatively simple system and cma heaps.
I've booted and tested these patches with AOSP on the HiKey960 using the kernel tree here: https://git.linaro.org/people/john.stultz/android-dev.git/log/?h=dev/dma-buf...
Do you have a 4.19 tree with the changes ? I tried but the xarray idr replacement is missing... so I can't test with our android-amlogic-bmeson-4.19 tree.
If you can provide, I'll be happy to test the serie and the gralloc changes.
Neil
And the userspace changes here: https://android-review.googlesource.com/c/device/linaro/hikey/+/909436
Compared to ION, this patchset is missing the system-contig, carveout and chunk heaps, as I don't have a device that uses those, so I'm unable to do much useful validation there. Additionally we have no upstream users of chunk or carveout, and the system-contig has been deprecated in the common/andoid-* kernels, so this should be ok.
I've also removed the stats accounting, since any such accounting should be implemented by dma-buf core or the heaps themselves.
New in v13:
- Re-remove symbol exports, per discussion with Brian. I'll resubmit these separately in a later patch so they can be independently reviewed
thanks -john
Cc: Laura Abbott labbott@redhat.com Cc: Benjamin Gaignard benjamin.gaignard@linaro.org Cc: Sumit Semwal sumit.semwal@linaro.org Cc: Liam Mark lmark@codeaurora.org Cc: Pratik Patel pratikp@codeaurora.org Cc: Brian Starkey Brian.Starkey@arm.com Cc: Vincent Donnefort Vincent.Donnefort@arm.com Cc: Sudipto Paul Sudipto.Paul@arm.com Cc: Andrew F. Davis afd@ti.com Cc: Christoph Hellwig hch@infradead.org Cc: Chenbo Feng fengc@google.com Cc: Alistair Strachan astrachan@google.com Cc: Hridya Valsaraju hridya@google.com Cc: Hillf Danton hdanton@sina.com Cc: dri-devel@lists.freedesktop.org
Andrew F. Davis (1): dma-buf: Add dma-buf heaps framework
John Stultz (4): dma-buf: heaps: Add heap helpers dma-buf: heaps: Add system heap to dmabuf heaps dma-buf: heaps: Add CMA heap to dmabuf heaps kselftests: Add dma-heap test
MAINTAINERS | 18 ++ drivers/dma-buf/Kconfig | 11 + drivers/dma-buf/Makefile | 2 + drivers/dma-buf/dma-heap.c | 269 ++++++++++++++++++ drivers/dma-buf/heaps/Kconfig | 14 + drivers/dma-buf/heaps/Makefile | 4 + drivers/dma-buf/heaps/cma_heap.c | 178 ++++++++++++ drivers/dma-buf/heaps/heap-helpers.c | 268 +++++++++++++++++ drivers/dma-buf/heaps/heap-helpers.h | 55 ++++ drivers/dma-buf/heaps/system_heap.c | 124 ++++++++ include/linux/dma-heap.h | 59 ++++ include/uapi/linux/dma-heap.h | 55 ++++ tools/testing/selftests/dmabuf-heaps/Makefile | 9 + .../selftests/dmabuf-heaps/dmabuf-heap.c | 238 ++++++++++++++++ 14 files changed, 1304 insertions(+) create mode 100644 drivers/dma-buf/dma-heap.c create mode 100644 drivers/dma-buf/heaps/Kconfig create mode 100644 drivers/dma-buf/heaps/Makefile create mode 100644 drivers/dma-buf/heaps/cma_heap.c create mode 100644 drivers/dma-buf/heaps/heap-helpers.c create mode 100644 drivers/dma-buf/heaps/heap-helpers.h create mode 100644 drivers/dma-buf/heaps/system_heap.c create mode 100644 include/linux/dma-heap.h create mode 100644 include/uapi/linux/dma-heap.h create mode 100644 tools/testing/selftests/dmabuf-heaps/Makefile create mode 100644 tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c
On Tue, Oct 22, 2019 at 1:21 AM Neil Armstrong narmstrong@baylibre.com wrote:
Hi John,
On 21/10/2019 21:03, John Stultz wrote:
Lucky number 13! :)
Last week in v12 I had re-added some symbol exports to support later patches I have pending to enable loading heaps from modules. He reminded me that back around v3 (its been awhile!) I had removed those exports due to concerns about the fact that we don't support module removal.
So I'm respinning the patches, removing the exports again. I'll submit a patch to re-add them in a later series enabling moduels which can be reviewed indepently.
With that done, lets get on to the boilerplate!
The patchset implements per-heap devices which can be opened directly and then an ioctl is used to allocate a dmabuf from the heap.
The interface is similar, but much simpler then IONs, only providing an ALLOC ioctl.
Also, I've provided relatively simple system and cma heaps.
I've booted and tested these patches with AOSP on the HiKey960 using the kernel tree here: https://git.linaro.org/people/john.stultz/android-dev.git/log/?h=dev/dma-buf...
Do you have a 4.19 tree with the changes ? I tried but the xarray idr replacement is missing... so I can't test with our android-amlogic-bmeson-4.19 tree.
If you can provide, I'll be happy to test the serie and the gralloc changes.
Unfortunately I don't have a 4.19 version of dmabuf heaps (all the work has been done this year, post 4.19). I'm planning to backport to 5.4 for AOSP, but I've not really thought about 4.19. Most likely I won't have time to look at it until after the changes are upstream and the 5.4 backport is done.
Is the bmeson tree likely to only stay at 4.19? Or will it move forward?
thanks -john
On 22/10/2019 17:56, John Stultz wrote:
On Tue, Oct 22, 2019 at 1:21 AM Neil Armstrong narmstrong@baylibre.com wrote:
Hi John,
On 21/10/2019 21:03, John Stultz wrote:
Lucky number 13! :)
Last week in v12 I had re-added some symbol exports to support later patches I have pending to enable loading heaps from modules. He reminded me that back around v3 (its been awhile!) I had removed those exports due to concerns about the fact that we don't support module removal.
So I'm respinning the patches, removing the exports again. I'll submit a patch to re-add them in a later series enabling moduels which can be reviewed indepently.
With that done, lets get on to the boilerplate!
The patchset implements per-heap devices which can be opened directly and then an ioctl is used to allocate a dmabuf from the heap.
The interface is similar, but much simpler then IONs, only providing an ALLOC ioctl.
Also, I've provided relatively simple system and cma heaps.
I've booted and tested these patches with AOSP on the HiKey960 using the kernel tree here: https://git.linaro.org/people/john.stultz/android-dev.git/log/?h=dev/dma-buf...
Do you have a 4.19 tree with the changes ? I tried but the xarray idr replacement is missing... so I can't test with our android-amlogic-bmeson-4.19 tree.
If you can provide, I'll be happy to test the serie and the gralloc changes.
Unfortunately I don't have a 4.19 version of dmabuf heaps (all the work has been done this year, post 4.19). I'm planning to backport to 5.4 for AOSP, but I've not really thought about 4.19. Most likely I won't have time to look at it until after the changes are upstream and the 5.4 backport is done.
Is the bmeson tree likely to only stay at 4.19? Or will it move forward?
No idea, I don't have any details on the future plans. Since we did an upstream-first support, 90% will be available on the future android-5.4 tree anyway.
Neil
thanks -john
On 10/22/19 3:21 AM, Neil Armstrong wrote:
Hi John,
On 21/10/2019 21:03, John Stultz wrote:
Lucky number 13! :)
Last week in v12 I had re-added some symbol exports to support later patches I have pending to enable loading heaps from modules. He reminded me that back around v3 (its been awhile!) I had removed those exports due to concerns about the fact that we don't support module removal.
So I'm respinning the patches, removing the exports again. I'll submit a patch to re-add them in a later series enabling moduels which can be reviewed indepently.
With that done, lets get on to the boilerplate!
The patchset implements per-heap devices which can be opened directly and then an ioctl is used to allocate a dmabuf from the heap.
The interface is similar, but much simpler then IONs, only providing an ALLOC ioctl.
Also, I've provided relatively simple system and cma heaps.
I've booted and tested these patches with AOSP on the HiKey960 using the kernel tree here: https://git.linaro.org/people/john.stultz/android-dev.git/log/?h=dev/dma-buf...
Do you have a 4.19 tree with the changes ? I tried but the xarray idr replacement is missing... so I can't test with our android-amlogic-bmeson-4.19 tree.
Just a note, we switched to xarray around v4 time frame of this series, so you may be able to find the IDR based code and plug it in for a 4.19 port.
Andrew
If you can provide, I'll be happy to test the serie and the gralloc changes.
Neil
And the userspace changes here: https://android-review.googlesource.com/c/device/linaro/hikey/+/909436
Compared to ION, this patchset is missing the system-contig, carveout and chunk heaps, as I don't have a device that uses those, so I'm unable to do much useful validation there. Additionally we have no upstream users of chunk or carveout, and the system-contig has been deprecated in the common/andoid-* kernels, so this should be ok.
I've also removed the stats accounting, since any such accounting should be implemented by dma-buf core or the heaps themselves.
New in v13:
- Re-remove symbol exports, per discussion with Brian. I'll resubmit these separately in a later patch so they can be independently reviewed
thanks -john
Cc: Laura Abbott labbott@redhat.com Cc: Benjamin Gaignard benjamin.gaignard@linaro.org Cc: Sumit Semwal sumit.semwal@linaro.org Cc: Liam Mark lmark@codeaurora.org Cc: Pratik Patel pratikp@codeaurora.org Cc: Brian Starkey Brian.Starkey@arm.com Cc: Vincent Donnefort Vincent.Donnefort@arm.com Cc: Sudipto Paul Sudipto.Paul@arm.com Cc: Andrew F. Davis afd@ti.com Cc: Christoph Hellwig hch@infradead.org Cc: Chenbo Feng fengc@google.com Cc: Alistair Strachan astrachan@google.com Cc: Hridya Valsaraju hridya@google.com Cc: Hillf Danton hdanton@sina.com Cc: dri-devel@lists.freedesktop.org
Andrew F. Davis (1): dma-buf: Add dma-buf heaps framework
John Stultz (4): dma-buf: heaps: Add heap helpers dma-buf: heaps: Add system heap to dmabuf heaps dma-buf: heaps: Add CMA heap to dmabuf heaps kselftests: Add dma-heap test
MAINTAINERS | 18 ++ drivers/dma-buf/Kconfig | 11 + drivers/dma-buf/Makefile | 2 + drivers/dma-buf/dma-heap.c | 269 ++++++++++++++++++ drivers/dma-buf/heaps/Kconfig | 14 + drivers/dma-buf/heaps/Makefile | 4 + drivers/dma-buf/heaps/cma_heap.c | 178 ++++++++++++ drivers/dma-buf/heaps/heap-helpers.c | 268 +++++++++++++++++ drivers/dma-buf/heaps/heap-helpers.h | 55 ++++ drivers/dma-buf/heaps/system_heap.c | 124 ++++++++ include/linux/dma-heap.h | 59 ++++ include/uapi/linux/dma-heap.h | 55 ++++ tools/testing/selftests/dmabuf-heaps/Makefile | 9 + .../selftests/dmabuf-heaps/dmabuf-heap.c | 238 ++++++++++++++++ 14 files changed, 1304 insertions(+) create mode 100644 drivers/dma-buf/dma-heap.c create mode 100644 drivers/dma-buf/heaps/Kconfig create mode 100644 drivers/dma-buf/heaps/Makefile create mode 100644 drivers/dma-buf/heaps/cma_heap.c create mode 100644 drivers/dma-buf/heaps/heap-helpers.c create mode 100644 drivers/dma-buf/heaps/heap-helpers.h create mode 100644 drivers/dma-buf/heaps/system_heap.c create mode 100644 include/linux/dma-heap.h create mode 100644 include/uapi/linux/dma-heap.h create mode 100644 tools/testing/selftests/dmabuf-heaps/Makefile create mode 100644 tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
Hi John,
On Tue, 22 Oct 2019 at 00:33, John Stultz john.stultz@linaro.org wrote:
Lucky number 13! :)
Last week in v12 I had re-added some symbol exports to support later patches I have pending to enable loading heaps from modules. He reminded me that back around v3 (its been awhile!) I had removed those exports due to concerns about the fact that we don't support module removal.
So I'm respinning the patches, removing the exports again. I'll submit a patch to re-add them in a later series enabling moduels which can be reviewed indepently.
This looks good to me, and hasn't seen any more comments, so I am going to merge it via drm-misc-next today.
With that done, lets get on to the boilerplate!
The patchset implements per-heap devices which can be opened directly and then an ioctl is used to allocate a dmabuf from the heap.
The interface is similar, but much simpler then IONs, only providing an ALLOC ioctl.
Also, I've provided relatively simple system and cma heaps.
I've booted and tested these patches with AOSP on the HiKey960 using the kernel tree here: https://git.linaro.org/people/john.stultz/android-dev.git/log/?h=dev/dma-buf...
And the userspace changes here: https://android-review.googlesource.com/c/device/linaro/hikey/+/909436
Compared to ION, this patchset is missing the system-contig, carveout and chunk heaps, as I don't have a device that uses those, so I'm unable to do much useful validation there. Additionally we have no upstream users of chunk or carveout, and the system-contig has been deprecated in the common/andoid-* kernels, so this should be ok.
I've also removed the stats accounting, since any such accounting should be implemented by dma-buf core or the heaps themselves.
New in v13:
- Re-remove symbol exports, per discussion with Brian. I'll resubmit these separately in a later patch so they can be independently reviewed
thanks -john
<snip>
Best, Sumit.
On Fri, 25 Oct 2019 at 11:26, Sumit Semwal sumit.semwal@linaro.org wrote:
Hi John,
On Tue, 22 Oct 2019 at 00:33, John Stultz john.stultz@linaro.org wrote:
Lucky number 13! :)
Last week in v12 I had re-added some symbol exports to support later patches I have pending to enable loading heaps from modules. He reminded me that back around v3 (its been awhile!) I had removed those exports due to concerns about the fact that we don't support module removal.
So I'm respinning the patches, removing the exports again. I'll submit a patch to re-add them in a later series enabling moduels which can be reviewed indepently.
This looks good to me, and hasn't seen any more comments, so I am going to merge it via drm-misc-next today.
Done; merged to drm-misc-next.
<snip>
Best, Sumit.
dri-devel@lists.freedesktop.org