ERROR: "vb2_ops_wait_finish" [drivers/input/touchscreen/sur40.ko] undefined!
Hi Florian, FYI, the error/warning still remains. tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 049e6dde7e57f0054fdc49102e7ef4830c698b46 commit: e831cd251fb91d6c25352d322743db0d17ea11dd [media] add raw video stream support for Samsung SUR40 date: 6 months ago config: x86_64-randconfig-s3-10062053 (attached as .config) reproduce: git checkout e831cd251fb91d6c25352d322743db0d17ea11dd # save the attached .config to linux build tree make ARCH=x86_64 All errors (new ones prefixed by >>): >> ERROR: "vb2_ops_wait_finish" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_ops_wait_prepare" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_fop_release" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "v4l2_fh_open" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_fop_mmap" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "video_ioctl2" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_fop_poll" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_fop_read" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_ioctl_streamoff" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_ioctl_streamon" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_ioctl_create_bufs" [drivers/input/touchscreen/sur40.ko] >> undefined! >> ERROR: "vb2_ioctl_dqbuf" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_ioctl_expbuf" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_ioctl_qbuf" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_ioctl_querybuf" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_ioctl_reqbufs" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "__video_register_device" [drivers/input/touchscreen/sur40.ko] >> undefined! >> ERROR: "video_device_release_empty" [drivers/input/touchscreen/sur40.ko] >> undefined! >> ERROR: "vb2_dma_sg_init_ctx" [drivers/input/touchscreen/sur40.ko] undefined! >> ERROR: "vb2_queue_init" [drivers/input/touchscreen/sur40.ko] undefined! --- 0-DAY kernel test infrastructureOpen Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation .config.gz Description: Binary data
Re: [PATCHv9 06/15] rc: Add HDMI CEC protocol handling
On Mon, Sep 07, 2015 at 03:44:35PM +0200, Hans Verkuil wrote: > From: Kamil Debski> > Add handling of remote control events coming from the HDMI CEC bus. > This patch includes a new keymap that maps values found in the CEC > messages to the keys pressed and released. Also, a new protocol has > been added to the core. > > Signed-off-by: Kamil Debski > Signed-off-by: Hans Verkuil (Added Mauro) Hmm, how is rc-cec supposed to be loaded? At boot, I see: [ 16.577704] IR keymap rc-cec not found [ 16.586675] Registered IR keymap rc-empty [ 16.591668] input: RC for dw_hdmi as /devices/soc0/soc/12.hdmi/rc/rc1/input3 [ 16.597769] rc1: RC for dw_hdmi as /devices/soc0/soc/12.hdmi/rc/rc1 Yet the rc-cec is a module in the filesystem, but it doesn't seem to be loaded automatically - even after the system has booted, the module hasn't been loaded. It looks like it _should_ be loaded, but this plainly isn't working: map = seek_rc_map(name); #ifdef MODULE if (!map) { int rc = request_module("%s", name); if (rc < 0) { printk(KERN_ERR "Couldn't load IR keymap %s\n", name); return NULL; } msleep(20); /* Give some time for IR to register */ map = seek_rc_map(name); } #endif if (!map) { printk(KERN_ERR "IR keymap %s not found\n", name); return NULL; } Any ideas? -- FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4 0/2] RFC: Secure Memory Allocation Framework
I have mind few uses cases: - the basic one when an HW device need contiguous memory. - I have a device that could not cross some memory boundaries so I need a specific allocator for it. - when allocating memory for security some platform have address constraints or need to allocate memory in specific areas (most of the time because of firewall limited capacities in terms of regions) 2015-10-06 4:07 GMT+02:00 Laura Abbott: > On 10/05/2015 03:11 AM, Benjamin Gaignard wrote: >> >> version 4 changes: >> - rebased on kernel 4.3-rc3 >> - fix missing EXPORT_SYMBOL for smaf_create_handle() >> >> version 3 changes: >> - Remove ioctl for allocator selection instead provide the name of >> the targeted allocator with allocation request. >> Selecting allocator from userland isn't the prefered way of working >> but is needed when the first user of the buffer is a software >> component. >> - Fix issues in case of error while creating smaf handle. >> - Fix module license. >> - Update libsmaf and tests to care of the SMAF API evolution >> https://git.linaro.org/people/benjamin.gaignard/libsmaf.git >> >> version 2 changes: >> - Add one ioctl to allow allocator selection from userspace. >> This is required for the uses case where the first user of >> the buffer is a software IP which can't perform dma_buf attachement. >> - Add name and ranking to allocator structure to be able to sort them. >> - Create a tiny library to test SMAF: >> https://git.linaro.org/people/benjamin.gaignard/libsmaf.git >> - Fix one issue when try to secure buffer without secure module >> registered >> >> The outcome of the previous RFC about how do secure data path was the need >> of a secure memory allocator (https://lkml.org/lkml/2015/5/5/551) >> >> SMAF goal is to provide a framework that allow allocating and securing >> memory by using dma_buf. Each platform have it own way to perform those >> two >> features so SMAF design allow to register helper modules to perform them. >> >> To be sure to select the best allocation method for devices SMAF implement >> deferred allocation mechanism: memory allocation is only done when the >> first >> device effectively required it. >> Allocator modules have to implement a match() to let SMAF know if they are >> compatibles with devices needs. >> This patch set provide an example of allocator module which use >> dma_{alloc/free/mmap}_attrs() and check if at least one device have >> coherent_dma_mask set to DMA_BIT_MASK(32) in match function. >> I have named smaf-cma.c like it is done for drm_gem_cma_helper.c even if >> a better name could be found for this file. >> >> Secure modules are responsibles of granting and revoking devices access >> rights >> on the memory. Secure module is also called to check if CPU map memory >> into >> kernel and user address spaces. >> An example of secure module implementation can be found here: >> http://git.linaro.org/people/benjamin.gaignard/optee-sdp.git >> This code isn't yet part of the patch set because it depends on generic >> TEE >> which is still under discussion (https://lwn.net/Articles/644646/) >> >> For allocation part of SMAF code I get inspirated by Sumit Semwal work >> about >> constraint aware allocator. >> > > Overall I like the abstraction. Do you have a use case in mind right now for > the best allocation method? Some of the classic examples (mmu vs. no mmu) > are gradually becoming less relevant as the systems have evolved. I was > discussing constraints with Sumit w.r.t. Ion at plumbers so I'm curious > about > your uses. > > Thanks, > Laura > > -- Benjamin Gaignard Graphic Working Group Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PULL FOR v4.4] smiapp module device of table
Hi Mauro, This pull request contains a single patch to add a module device of table to the smiapp driver. Please pull. The following changes since commit efe98010b80ec4516b2779e1b4e4a8ce16bf89fe: [media] DocBook: Fix remaining issues with VB2 core documentation (2015-10-05 09:12:56 -0300) are available in the git repository at: ssh://linuxtv.org/git/sailus/media_tree.git tags/smiapp-for-v4.4 for you to fetch changes up to 7eed8629b33e6ba8434d5698393241d5fe188a8a: smiapp: Export OF module alias information (2015-10-06 12:48:15 +0300) Javier Martinez Canillas (1): smiapp: Export OF module alias information drivers/media/i2c/smiapp/smiapp-core.c | 1 + 1 file changed, 1 insertion(+) -- Kind regards, Sakari Ailus e-mail: sakari.ai...@iki.fi XMPP: sai...@retiisi.org.uk -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v4 1/2] create SMAF module
Thanks for your review I will add a lock in smaf_handle structure. One of the goal of smaf is to create a standard kernel API to allocate and secure buffers to avoid forking while implementing buffer securing feature. One concern about ION is that the selection of the heap is done by userland so hardware constraints need to be known by the userland, which is problematic from my point of view. Compare to ION I have try to introduce features like securing API, flexible allocator selection on kernel and the possibility to add custom allocator and securing modules. Benjamin 2015-10-06 3:58 GMT+02:00 Laura Abbott: > On 10/05/2015 03:11 AM, Benjamin Gaignard wrote: >> >> diff --git a/drivers/smaf/smaf-core.c b/drivers/smaf/smaf-core.c >> new file mode 100644 >> index 000..37914e7 >> --- /dev/null >> +++ b/drivers/smaf/smaf-core.c >> @@ -0,0 +1,736 @@ >> +/* >> + * smaf.c >> + * >> + * Copyright (C) Linaro SA 2015 >> + * Author: Benjamin Gaignard for Linaro. >> + * License terms: GNU General Public License (GPL), version 2 >> + */ >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +struct smaf_handle { >> + struct dma_buf *dmabuf; >> + struct smaf_allocator *allocator; >> + struct dma_buf *db_alloc; >> + size_t length; >> + unsigned int flags; >> + int fd; >> + bool is_secure; >> + void *secure_ctx; >> +}; >> + >> +/** >> + * struct smaf_device - smaf device node private data >> + * @misc_dev: the misc device >> + * @head: list of allocator >> + * @lock: list and secure pointer mutex >> + * @secure:pointer to secure functions helpers >> + */ >> +struct smaf_device { >> + struct miscdevice misc_dev; >> + struct list_head head; >> + /* list and secure pointer lock*/ >> + struct mutex lock; >> + struct smaf_secure *secure; >> +}; >> + >> +static struct smaf_device smaf_dev; >> + >> +/** >> + * smaf_allow_cpu_access return true if CPU can access to memory >> + * if their is no secure module associated to SMAF assume that CPU can >> get >> + * access to the memory. >> + */ >> +static bool smaf_allow_cpu_access(struct smaf_handle *handle, >> + unsigned long flags) >> +{ >> + if (!handle->is_secure) >> + return true; >> + >> + if (!smaf_dev.secure) >> + return true; >> + >> + if (!smaf_dev.secure->allow_cpu_access) >> + return true; >> + >> + return smaf_dev.secure->allow_cpu_access(handle->secure_ctx, >> flags); >> +} >> + >> +static int smaf_grant_access(struct smaf_handle *handle, struct device >> *dev, >> +dma_addr_t addr, size_t size, >> +enum dma_data_direction dir) >> +{ >> + if (!handle->is_secure) >> + return 0; >> + >> + if (!smaf_dev.secure) >> + return -EINVAL; >> + >> + if (!smaf_dev.secure->grant_access) >> + return -EINVAL; >> + >> + return smaf_dev.secure->grant_access(handle->secure_ctx, >> +dev, addr, size, dir); >> +} >> + >> +static void smaf_revoke_access(struct smaf_handle *handle, struct device >> *dev, >> + dma_addr_t addr, size_t size, >> + enum dma_data_direction dir) >> +{ >> + if (!handle->is_secure) >> + return; >> + >> + if (!smaf_dev.secure) >> + return; >> + >> + if (!smaf_dev.secure->revoke_access) >> + return; >> + >> + smaf_dev.secure->revoke_access(handle->secure_ctx, >> + dev, addr, size, dir); >> +} >> + >> +static int smaf_secure_handle(struct smaf_handle *handle) >> +{ >> + if (handle->is_secure) >> + return 0; >> + >> + if (!smaf_dev.secure) >> + return -EINVAL; >> + >> + if (!smaf_dev.secure->create_context) >> + return -EINVAL; >> + >> + handle->secure_ctx = smaf_dev.secure->create_context(); >> + >> + if (!handle->secure_ctx) >> + return -EINVAL; >> + >> + handle->is_secure = true; >> + return 0; >> +} >> + >> +static int smaf_unsecure_handle(struct smaf_handle *handle) >> +{ >> + if (!handle->is_secure) >> + return 0; >> + >> + if (!smaf_dev.secure) >> + return -EINVAL; >> + >> + if (!smaf_dev.secure->destroy_context) >> + return -EINVAL; >> + >> + if (smaf_dev.secure->destroy_context(handle->secure_ctx)) >> + return -EINVAL; >> + >> + handle->secure_ctx = NULL; >> + handle->is_secure = false; >> + return 0; >> +} > > > All these functions need to be protected by a lock,
cron job: media_tree daily build: ERRORS
This message is generated daily by a cron job that builds media_tree for the kernels and architectures in the list below. Results of the daily build of media_tree: date: Wed Oct 7 04:00:16 CEST 2015 git branch: test git hash: efe98010b80ec4516b2779e1b4e4a8ce16bf89fe gcc version:i686-linux-gcc (GCC) 5.1.0 sparse version: v0.5.0-51-ga53cea2 smatch version: 0.4.1-3153-g7d56ab3 host hardware: x86_64 host os:4.0.0-3.slh.1-amd64 linux-git-arm-at91: OK linux-git-arm-davinci: OK linux-git-arm-exynos: OK linux-git-arm-mx: OK linux-git-arm-omap: OK linux-git-arm-omap1: OK linux-git-arm-pxa: OK linux-git-blackfin-bf561: OK linux-git-i686: OK linux-git-m32r: OK linux-git-mips: OK linux-git-powerpc64: OK linux-git-sh: OK linux-git-x86_64: OK linux-2.6.32.27-i686: ERRORS linux-2.6.33.7-i686: ERRORS linux-2.6.34.7-i686: ERRORS linux-2.6.35.9-i686: ERRORS linux-2.6.36.4-i686: ERRORS linux-2.6.37.6-i686: ERRORS linux-2.6.38.8-i686: ERRORS linux-2.6.39.4-i686: ERRORS linux-3.0.60-i686: ERRORS linux-3.1.10-i686: ERRORS linux-3.2.37-i686: ERRORS linux-3.3.8-i686: ERRORS linux-3.4.27-i686: ERRORS linux-3.5.7-i686: ERRORS linux-3.6.11-i686: ERRORS linux-3.7.4-i686: ERRORS linux-3.8-i686: ERRORS linux-3.9.2-i686: ERRORS linux-3.10.1-i686: ERRORS linux-3.11.1-i686: ERRORS linux-3.12.23-i686: ERRORS linux-3.13.11-i686: ERRORS linux-3.14.9-i686: ERRORS linux-3.15.2-i686: ERRORS linux-3.16.7-i686: ERRORS linux-3.17.8-i686: ERRORS linux-3.18.7-i686: OK linux-3.19-i686: OK linux-4.0-i686: OK linux-4.1.1-i686: OK linux-4.2-i686: OK linux-4.3-rc1-i686: OK linux-2.6.32.27-x86_64: ERRORS linux-2.6.33.7-x86_64: ERRORS linux-2.6.34.7-x86_64: ERRORS linux-2.6.35.9-x86_64: ERRORS linux-2.6.36.4-x86_64: ERRORS linux-2.6.37.6-x86_64: ERRORS linux-2.6.38.8-x86_64: ERRORS linux-2.6.39.4-x86_64: ERRORS linux-3.0.60-x86_64: ERRORS linux-3.1.10-x86_64: ERRORS linux-3.2.37-x86_64: ERRORS linux-3.3.8-x86_64: ERRORS linux-3.4.27-x86_64: ERRORS linux-3.5.7-x86_64: ERRORS linux-3.6.11-x86_64: ERRORS linux-3.7.4-x86_64: ERRORS linux-3.8-x86_64: ERRORS linux-3.9.2-x86_64: ERRORS linux-3.10.1-x86_64: ERRORS linux-3.11.1-x86_64: ERRORS linux-3.12.23-x86_64: ERRORS linux-3.13.11-x86_64: ERRORS linux-3.14.9-x86_64: ERRORS linux-3.15.2-x86_64: ERRORS linux-3.16.7-x86_64: ERRORS linux-3.17.8-x86_64: ERRORS linux-3.18.7-x86_64: OK linux-3.19-x86_64: OK linux-4.0-x86_64: OK linux-4.1.1-x86_64: OK linux-4.2-x86_64: OK linux-4.3-rc1-x86_64: OK apps: OK spec-git: OK sparse: ERRORS smatch: ERRORS Detailed results are available here: http://www.xs4all.nl/~hverkuil/logs/Wednesday.log Full logs are available here: http://www.xs4all.nl/~hverkuil/logs/Wednesday.tar.bz2 The Media Infrastructure API from this daily build is here: http://www.xs4all.nl/~hverkuil/spec/media.html -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 7/7] [media] ivtv: Convert to get_user_pages_unlocked()
From: Jan KaraConvert ivtv_yuv_prep_user_dma() to use get_user_pages_unlocked() so that we don't unnecessarily leak knowledge about mm locking into drivers code. CC: Andy Walls CC: Mauro Carvalho Chehab CC: linux-media@vger.kernel.org Signed-off-by: Jan Kara --- drivers/media/pci/ivtv/ivtv-yuv.c | 12 ++-- 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/media/pci/ivtv/ivtv-yuv.c b/drivers/media/pci/ivtv/ivtv-yuv.c index 2ad65eb29832..2b8e7b2f2b86 100644 --- a/drivers/media/pci/ivtv/ivtv-yuv.c +++ b/drivers/media/pci/ivtv/ivtv-yuv.c @@ -75,15 +75,15 @@ static int ivtv_yuv_prep_user_dma(struct ivtv *itv, struct ivtv_user_dma *dma, ivtv_udma_get_page_info (_dma, (unsigned long)args->uv_source, 360 * uv_decode_height); /* Get user pages for DMA Xfer */ - down_read(>mm->mmap_sem); - y_pages = get_user_pages(current, current->mm, y_dma.uaddr, y_dma.page_count, 0, 1, >map[0], NULL); + y_pages = get_user_pages_unlocked(current, current->mm, + y_dma.uaddr, y_dma.page_count, 0, 1, + >map[0]); uv_pages = 0; /* silence gcc. value is set and consumed only if: */ if (y_pages == y_dma.page_count) { - uv_pages = get_user_pages(current, current->mm, - uv_dma.uaddr, uv_dma.page_count, 0, 1, - >map[y_pages], NULL); + uv_pages = get_user_pages_unlocked(current, current->mm, + uv_dma.uaddr, uv_dma.page_count, 0, 1, + >map[y_pages]); } - up_read(>mm->mmap_sem); if (y_pages != y_dma.page_count || uv_pages != uv_dma.page_count) { int rc = -EFAULT; -- 2.1.4 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[RFC PATCH] New uAPI for DVB streaming I/O
Hello everybody, I would like to introduce a new uAPI for DVB streaming I/O. Current DVB framework uses ringbuffer mechanism to demux MPEG-2 TS data and pass it to userspace. However, this mechanism requires extra memory copy because DVB framework provides only read() system call, which copies the kernel data in ringbuffer to user-space buffer. New uAPIs can remove the memory copy by using videobuf2 framework (a.k.a VB2) which supports ioctl() calls related to streaming I/O, including buffer allocation and queue management. In this patch series, I have tried to implement DVB streaming I/O without breaking existing legacy interfaces and cover all functionalities of read() system call with new ioctl() calls. The user scenario is very similar to v4l2's, but belows are different. 1. Support only CAPTURE buffer type with single plane. 2. Support only MMAP memory type. 3. STREAMON will execute automatically when the first buffer is queued. 4. STREANOFF will also execute automatically when dvr or dmxdev_filter are released. 5. User can decide not only buffer count but also buffer size by REQBUFS. New ioctl() calls and data structure are belows - defined in include/uapi/linux/dvb/dmx.h. struct dmx_buffer { __u32 index; __u32 bytesused; __u32 offset; __u32 length; __u32 reserved[4]; }; struct dmx_requestbuffers { __u32 count; __u32 size; __u32 reserved[2]; }; struct dmx_exportbuffer { __u32 index; __u32 flags; __s32 fd; __u32 reserved; }; #define DMX_REQBUFS _IOWR('o', 60, struct dmx_requestbuffers) #define DMX_QUERYBUF _IOWR('o', 61, struct dmx_buffer) #define DMX_EXPBUF _IOWR('o', 62, struct dmx_exportbuffer) #define DMX_QBUF _IOWR('o', 63, struct dmx_buffer) #define DMX_DQBUF_IOWR('o', 64, struct dmx_buffer) This patch series is consisted of two parts - kernel changes and test patch for dvbv5-zap. 1. Kernel changes It includes implementation of the helper framework for DVB to use Videobuf2 and changes of the DVB framework inside. If you want to probe this patch, firstly, you should apply the patch for VB2 refactoring before do that. Please refer to this link for more information about VB2 refactoring. [1] RFC PATCH v5 - Refactoring Videobuf2 for common use http://www.spinics.net/lists/linux-media/msg93810.html This patch also have been applied to my own git. [2] jsung/dvb-vb2.git - http://git.linuxtv.org/cgit.cgi/jsung/dvb-vb2.git/ (branch: dvb-vb2) 2. Patch for testing DVB streaming I/O with dvbv5-zap You can use '-R' option instead of '-r' to record TS data via DVR, when you launch the dvbv5-zap application. If you do, dvbv5-zap will use following ioctl() calls instead of read() system call. - DMX_REQBUFS : Request kernel to allocate buffers which count and size are dedicated by user. - DMX_QUERYBUF : Get the buffer information like a memory offset which will mmap() and be shared with user-space. - DMX_EXPBUF : Just for testing whether buffer-exporting success or not. - DMX_QBUF : Pass the buffer to kernel-space. - DMX_DQBUF : Get back the buffer which may contain TS data gathered by DVR. Any suggestions and comments are welcome. Regards, Junghak Junghak Sung (1): media: videobuf2: Add new uAPI for DVB streaming I/O drivers/media/dvb-core/Makefile |2 +- drivers/media/dvb-core/dmxdev.c | 189 +++--- drivers/media/dvb-core/dmxdev.h |4 + drivers/media/dvb-core/dvb_vb2.c | 406 ++ drivers/media/dvb-core/dvb_vb2.h | 69 +++ include/uapi/linux/dvb/dmx.h | 66 ++- 6 files changed, 709 insertions(+), 27 deletions(-) create mode 100644 drivers/media/dvb-core/dvb_vb2.c create mode 100644 drivers/media/dvb-core/dvb_vb2.h -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH 0/7] get_user_pages() cleanup
From: Jan KaraHello, Now when the usage of get_user_pages() in media drivers got cleaned up, here comes a series which removes knowledge about mmap_sem from a couple of other drivers. Patches are trivial and standalone but please check, they are only compile tested. If you are OK with them, either take them through your respective trees or ack them and I can take care of pushing them to Linus (probably through mm tree). Thanks. After these patches there are some 12 call sites of get_user_pages() outside of core code (mostly infiniband and RDMA). So we are slowly getting to the goal of removing knowledge about page fault locking from drivers which will consequently allow us to change the locking rules with reasonable effort. Honza CC: Jesper Nilsson CC: linux-cris-ker...@axis.com CC: Mikael Starvik CC: linux-i...@vger.kernel.org CC: Tony Luck CC: David Airlie CC: dri-de...@lists.freedesktop.org CC: Timur Tabi CC: linux-r...@vger.kernel.org CC: Roland Dreier CC: Daniel Vetter CC: David Airlie CC: dri-de...@lists.freedesktop.org CC: Andy Walls CC: linux-media@vger.kernel.org CC: Mauro Carvalho Chehab -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[RFC PATCH v6 0/4] Refactoring Videobuf2 for common use
Hello everybody, This is the 6th round for refactoring Videobuf2(a.k.a VB2). The purpose of this patch series is to separate existing VB2 framework into core part and V4L2 specific part. So that not only V4L2 but also other frameworks can use them to manage buffer and utilize queue. Why do we try to make the VB2 framework to be common? As you may know, current DVB framework uses ringbuffer mechanism to demux MPEG-2 TS data and pass it to userspace. However, this mechanism requires extra memory copy because DVB framework provides only read() system call for application - read() system call copies the kernel data to user-space buffer. So if we can use VB2 framework which supports streaming I/O and buffer sharing mechanism, then we could enhance existing DVB framework by removing the extra memory copy - with VB2 framework, application can access the kernel data directly through mmap system call. We have a plan for this work as follows: 1. Separate existing VB2 framework into three parts - VB2 core, VB2 v4l2. Of course, this change will not affect other v4l2-based device drivers. This patch series corresponds to this step. 2. Add and implement new APIs for DVB streaming I/O. We can remove unnecessary memory copy between kernel-space and user-space by using these new APIs. However, we leaves legacy interfaces as-is for backward compatibility. This patch series is the first step for it. The previous version of this patch series can be found at belows. [1] RFC PATCH v1 - http://www.spinics.net/lists/linux-media/msg90688.html [2] RFC PATCH v2 - http://www.spinics.net/lists/linux-media/msg92130.html [3] RFC PATCH v3 - http://www.spinics.net/lists/linux-media/msg92953.html [4] RFC PATCH v4 - http://www.spinics.net/lists/linux-media/msg93421.html [5] RFC PATCH v5 - http://www.spinics.net/lists/linux-media/msg93810.html Changes since v5 1. v5 is merged partially to media_tree 4 of 8 patches - restructuring vb2_buffer for common use - are merged to media_tree. So, v6 is rebased on later version than that. 2. vb2_format is reverted to void * vb2_format - which is newly defined for queue_setup() in v5 to deliver the format information from user-space to device driver - is reverted to void pointer. This change requires more discussion about the way to do the format validation and decide the image size. So, in this version, I would like to revert it to original version. 3. The change related with v4l2_buf_ops is moved The change related with v4l2_buf_ops seems to be a sort of functional change. So, it was moved to patch 3/4 - which includes the most of functional changes. Changes since v4 1. Rebase on 4.3-rc1 Kernel 4.3-rc1 was released. So, this patch set is made based on that version. 2. Modify queue_setup() argument In previous patch set, struct v4l2_format, which is a parameter of queue_setup(), is abstracted by using void pointer. But, it is better way to pass the parameter with presise meaning than abstracting it. So, replace void * with struct vb2_format which is newly defined to contain the format information for common use. 3. Add a code to check if VB2_MAX_* match with VIDEO_MAX_* Add a check code to videobuf2-v4l2.c where the compiler compares VIDEO_MAX_FRAME and VB2_MAX_FRAME (and ditto for MAX_PLANES) and throws an #error if they do not match. 4. Change the commit order For easier review, the patch that just move things around without doing any functional change is moved to the last. All ideas above are from Hans and it seems to be better and right way. Changes since v3 1. Resolve build errors In previous patch set, the build errors prevented reviewers from applying the patch. So, in this patch, I tryed to fix the build errors but I hadn't the build test on all architectures except for x86 and ARM. 2. Modify descriptions for DocBook Descriptions not complying with the DocBook rule are modified, which was pointed out by Mauro. 3. Initialize reserved fields explicitly The reserved fields of v4l2_buffer are initialized by 0 explicitly when the vb2_buffer information is returned to userspace, which was pointed out by Hans. 4. Remove unnecessary type-cast According to Mauro's advice, the unnecessary type-cast are removed because it's better for the compiler - rather than human - to check those things. 5. Sperate the patch - not easy to review - into two patches In previous patch set, patch 5 was too difficult to review. So accoring to Hans' opinion, it separated the patch without any functional changes. Changes since v2 1. Remove v4l2 stuffs completely from vb2_buffer The v4l2 stuffs - v4l2_buf and v4l2_planes - are removed completely from struct vb2_buffer. New member variables - index, type, memory - are added to struct vb2_buffer, all of which can be used commonly. And bytesused, length, offset, userptr, fd, data_offset are added to struct vb2_plane for the same reason. So, we can manage video buffer by only using struct vb2_buffer. And, v4l2 stuffs - flags, field,
[PATCH 1/4] media: videobuf2: Change queue_setup argument
Replace struct v4l2_format * with void * to make queue_setup() for common use. And then, modify all device drivers related with this change. Signed-off-by: Junghak SungSigned-off-by: Geunyoung Kim Acked-by: Seung-Woo Kim Acked-by: Inki Dae --- Documentation/video4linux/v4l2-pci-skeleton.c |4 +++- drivers/input/touchscreen/sur40.c |3 ++- drivers/media/dvb-frontends/rtl2832_sdr.c |2 +- drivers/media/pci/cobalt/cobalt-v4l2.c |4 ++-- drivers/media/pci/cx23885/cx23885-417.c|2 +- drivers/media/pci/cx23885/cx23885-dvb.c|2 +- drivers/media/pci/cx23885/cx23885-vbi.c|2 +- drivers/media/pci/cx23885/cx23885-video.c |2 +- drivers/media/pci/cx25821/cx25821-video.c |3 ++- drivers/media/pci/cx88/cx88-blackbird.c|2 +- drivers/media/pci/cx88/cx88-dvb.c |2 +- drivers/media/pci/cx88/cx88-vbi.c |2 +- drivers/media/pci/cx88/cx88-video.c|2 +- drivers/media/pci/dt3155/dt3155.c |3 ++- drivers/media/pci/netup_unidvb/netup_unidvb_core.c |2 +- drivers/media/pci/saa7134/saa7134-ts.c |2 +- drivers/media/pci/saa7134/saa7134-vbi.c|2 +- drivers/media/pci/saa7134/saa7134-video.c |2 +- drivers/media/pci/saa7134/saa7134.h|2 +- drivers/media/pci/solo6x10/solo6x10-v4l2-enc.c |2 +- drivers/media/pci/solo6x10/solo6x10-v4l2.c |2 +- drivers/media/pci/sta2x11/sta2x11_vip.c|2 +- drivers/media/pci/tw68/tw68-video.c|3 ++- drivers/media/platform/am437x/am437x-vpfe.c|3 ++- drivers/media/platform/blackfin/bfin_capture.c |3 ++- drivers/media/platform/coda/coda-common.c |3 +-- drivers/media/platform/davinci/vpbe_display.c |3 ++- drivers/media/platform/davinci/vpif_capture.c |3 ++- drivers/media/platform/davinci/vpif_display.c |3 ++- drivers/media/platform/exynos-gsc/gsc-m2m.c|2 +- drivers/media/platform/exynos4-is/fimc-capture.c |3 ++- drivers/media/platform/exynos4-is/fimc-isp-video.c |3 ++- drivers/media/platform/exynos4-is/fimc-lite.c |3 ++- drivers/media/platform/exynos4-is/fimc-m2m.c |2 +- drivers/media/platform/m2m-deinterlace.c |2 +- drivers/media/platform/marvell-ccic/mcam-core.c|3 ++- drivers/media/platform/mx2_emmaprp.c |2 +- drivers/media/platform/omap3isp/ispvideo.c |2 +- drivers/media/platform/rcar_jpu.c |3 ++- drivers/media/platform/s3c-camif/camif-capture.c |3 ++- drivers/media/platform/s5p-g2d/g2d.c |2 +- drivers/media/platform/s5p-jpeg/jpeg-core.c|2 +- drivers/media/platform/s5p-mfc/s5p_mfc_dec.c |2 +- drivers/media/platform/s5p-mfc/s5p_mfc_enc.c |2 +- drivers/media/platform/s5p-tv/mixer_video.c|2 +- drivers/media/platform/sh_veu.c|3 ++- drivers/media/platform/sh_vou.c|3 ++- drivers/media/platform/soc_camera/atmel-isi.c |2 +- drivers/media/platform/soc_camera/mx2_camera.c |3 ++- drivers/media/platform/soc_camera/mx3_camera.c |3 ++- drivers/media/platform/soc_camera/rcar_vin.c |3 ++- .../platform/soc_camera/sh_mobile_ceu_camera.c |6 -- drivers/media/platform/sti/bdisp/bdisp-v4l2.c |3 ++- drivers/media/platform/ti-vpe/vpe.c|2 +- drivers/media/platform/vim2m.c |3 ++- drivers/media/platform/vivid/vivid-sdr-cap.c |2 +- drivers/media/platform/vivid/vivid-vbi-cap.c |7 +++ drivers/media/platform/vivid/vivid-vbi-out.c |2 +- drivers/media/platform/vivid/vivid-vid-cap.c |3 ++- drivers/media/platform/vivid/vivid-vid-out.c |3 ++- drivers/media/platform/vsp1/vsp1_video.c |3 ++- drivers/media/platform/xilinx/xilinx-dma.c |3 ++- drivers/media/usb/airspy/airspy.c |2 +- drivers/media/usb/au0828/au0828-vbi.c |3 ++- drivers/media/usb/au0828/au0828-video.c|3 ++- drivers/media/usb/em28xx/em28xx-vbi.c |3 ++- drivers/media/usb/em28xx/em28xx-video.c|3 ++- drivers/media/usb/go7007/go7007-v4l2.c |2 +- drivers/media/usb/hackrf/hackrf.c |2 +- drivers/media/usb/msi2500/msi2500.c|2 +- drivers/media/usb/pwc/pwc-if.c |2 +- drivers/media/usb/s2255/s2255drv.c |2 +- drivers/media/usb/stk1160/stk1160-v4l.c|2 +- drivers/media/usb/usbtv/usbtv-video.c |3 ++-
[PATCH 3/4] media: videobuf2: Prepare to divide videobuf2
Prepare to divide videobuf2 - Separate vb2 trace events from v4l2 trace event. - Make wrapper functions that will move to v4l2-side. - Make vb2_core_* functions that will remain in core-side. - Add a callback function table for buffer operation which makes vb2-core to be able to invoke a v4l2-side functions. - Rename internal functions as vb2_*. Signed-off-by: Junghak SungSigned-off-by: Geunyoung Kim Acked-by: Seung-Woo Kim Acked-by: Inki Dae --- drivers/media/v4l2-core/Makefile |2 +- drivers/media/v4l2-core/v4l2-trace.c |8 +- drivers/media/v4l2-core/vb2-trace.c |9 + drivers/media/v4l2-core/videobuf2-core.c | 561 -- include/media/videobuf2-core.h | 10 + include/trace/events/v4l2.h | 28 +- include/trace/events/vb2.h | 65 7 files changed, 480 insertions(+), 203 deletions(-) create mode 100644 drivers/media/v4l2-core/vb2-trace.c create mode 100644 include/trace/events/vb2.h diff --git a/drivers/media/v4l2-core/Makefile b/drivers/media/v4l2-core/Makefile index ad07401..1dc8bba 100644 --- a/drivers/media/v4l2-core/Makefile +++ b/drivers/media/v4l2-core/Makefile @@ -14,7 +14,7 @@ ifeq ($(CONFIG_OF),y) videodev-objs += v4l2-of.o endif ifeq ($(CONFIG_TRACEPOINTS),y) - videodev-objs += v4l2-trace.o + videodev-objs += vb2-trace.o v4l2-trace.o endif obj-$(CONFIG_VIDEO_V4L2) += videodev.o diff --git a/drivers/media/v4l2-core/v4l2-trace.c b/drivers/media/v4l2-core/v4l2-trace.c index 4004814..7416010 100644 --- a/drivers/media/v4l2-core/v4l2-trace.c +++ b/drivers/media/v4l2-core/v4l2-trace.c @@ -5,7 +5,7 @@ #define CREATE_TRACE_POINTS #include -EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_buf_done); -EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_buf_queue); -EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_dqbuf); -EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_qbuf); +EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_v4l2_buf_done); +EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_v4l2_buf_queue); +EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_v4l2_dqbuf); +EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_v4l2_qbuf); diff --git a/drivers/media/v4l2-core/vb2-trace.c b/drivers/media/v4l2-core/vb2-trace.c new file mode 100644 index 000..61e74f5 --- /dev/null +++ b/drivers/media/v4l2-core/vb2-trace.c @@ -0,0 +1,9 @@ +#include + +#define CREATE_TRACE_POINTS +#include + +EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_buf_done); +EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_buf_queue); +EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_dqbuf); +EXPORT_TRACEPOINT_SYMBOL_GPL(vb2_qbuf); diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index db685e8..2c05705 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c @@ -30,7 +30,7 @@ #include #include -#include +#include static int debug; module_param(debug, int, 0644); @@ -174,6 +174,14 @@ module_param(debug, int, 0644); #endif +#define call_bufop(q, op, args...) \ +({ \ + int ret = 0;\ + if (q && q->buf_ops && q->buf_ops->op) \ + ret = q->buf_ops->op(args); \ + ret;\ +}) + /* Flags that are set by the vb2 core */ #define V4L2_BUFFER_MASK_FLAGS (V4L2_BUF_FLAG_MAPPED | V4L2_BUF_FLAG_QUEUED | \ V4L2_BUF_FLAG_DONE | V4L2_BUF_FLAG_ERROR | \ @@ -612,10 +620,10 @@ static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b) } /** - * __buffer_in_use() - return true if the buffer is in use and + * vb2_buffer_in_use() - return true if the buffer is in use and * the queue cannot be freed (by the means of REQBUFS(0)) call */ -static bool __buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb) +static bool vb2_buffer_in_use(struct vb2_queue *q, struct vb2_buffer *vb) { unsigned int plane; for (plane = 0; plane < vb->num_planes; ++plane) { @@ -640,7 +648,7 @@ static bool __buffers_in_use(struct vb2_queue *q) { unsigned int buffer; for (buffer = 0; buffer < q->num_buffers; ++buffer) { - if (__buffer_in_use(q, q->bufs[buffer])) + if (vb2_buffer_in_use(q, q->bufs[buffer])) return true; } return false; @@ -650,8 +658,9 @@ static bool __buffers_in_use(struct vb2_queue *q) * __fill_v4l2_buffer() - fill in a struct v4l2_buffer with information to be * returned to userspace */ -static void __fill_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b) +static int __fill_v4l2_buffer(struct vb2_buffer *vb, void *pb) { + struct v4l2_buffer *b = pb; struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); struct vb2_queue
[PATCH 4/4] media: videobuf2: Move v4l2-specific stuff to videobuf2-v4l2
Move v4l2-specific stuff from videobu2-core to videobuf2-v4l2 without doing any functional changes. Signed-off-by: Junghak SungSigned-off-by: Geunyoung Kim Acked-by: Seung-Woo Kim Acked-by: Inki Dae --- drivers/media/v4l2-core/videobuf2-core.c | 1843 +- drivers/media/v4l2-core/videobuf2-internal.h | 161 +++ drivers/media/v4l2-core/videobuf2-v4l2.c | 1630 +++ include/media/videobuf2-core.h | 108 +- include/media/videobuf2-dvb.h|8 +- include/media/videobuf2-v4l2.h | 96 ++ 6 files changed, 1951 insertions(+), 1895 deletions(-) create mode 100644 drivers/media/v4l2-core/videobuf2-internal.h diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index 2c05705..33bdd81 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c @@ -24,172 +24,15 @@ #include #include -#include -#include -#include -#include -#include +#include #include -static int debug; -module_param(debug, int, 0644); +#include "videobuf2-internal.h" -#define dprintk(level, fmt, arg...) \ - do { \ - if (debug >= level) \ - pr_info("vb2: %s: " fmt, __func__, ## arg); \ - } while (0) - -#ifdef CONFIG_VIDEO_ADV_DEBUG - -/* - * If advanced debugging is on, then count how often each op is called - * successfully, which can either be per-buffer or per-queue. - * - * This makes it easy to check that the 'init' and 'cleanup' - * (and variations thereof) stay balanced. - */ - -#define log_memop(vb, op) \ - dprintk(2, "call_memop(%p, %d, %s)%s\n",\ - (vb)->vb2_queue, (vb)->index, #op, \ - (vb)->vb2_queue->mem_ops->op ? "" : " (nop)") - -#define call_memop(vb, op, args...)\ -({ \ - struct vb2_queue *_q = (vb)->vb2_queue; \ - int err;\ - \ - log_memop(vb, op); \ - err = _q->mem_ops->op ? _q->mem_ops->op(args) : 0; \ - if (!err) \ - (vb)->cnt_mem_ ## op++; \ - err;\ -}) - -#define call_ptr_memop(vb, op, args...) \ -({ \ - struct vb2_queue *_q = (vb)->vb2_queue; \ - void *ptr; \ - \ - log_memop(vb, op); \ - ptr = _q->mem_ops->op ? _q->mem_ops->op(args) : NULL; \ - if (!IS_ERR_OR_NULL(ptr)) \ - (vb)->cnt_mem_ ## op++; \ - ptr;\ -}) - -#define call_void_memop(vb, op, args...) \ -({ \ - struct vb2_queue *_q = (vb)->vb2_queue; \ - \ - log_memop(vb, op); \ - if (_q->mem_ops->op)\ - _q->mem_ops->op(args); \ - (vb)->cnt_mem_ ## op++; \ -}) - -#define log_qop(q, op) \ - dprintk(2, "call_qop(%p, %s)%s\n", q, #op, \ - (q)->ops->op ? "" : " (nop)") - -#define call_qop(q, op, args...) \ -({ \ - int err;\ - \ - log_qop(q, op); \ - err = (q)->ops->op ? (q)->ops->op(args) : 0;\ - if (!err) \ - (q)->cnt_ ## op++;
[PATCH 2/4] media: videobuf2: Replace v4l2-specific data with vb2 data.
Simple changes that replace v4l2-specific data with vb2 data in videobuf2-core. enum v4l2_buf_type --> int enum v4l2_memory --> enum vb2_memory VIDEO_MAX_FRAME --> VB2_MAX_FRAME VIDEO_MAX_PLANES --> VB2_MAX_PLANES struct v4l2_fh *owner --> void *owner V4L2_TYPE_IS_MULTIPLANAR() --> is_multiplanar V4L2_TYPE_IS_OUTPUT() --> is_output Signed-off-by: Junghak SungSigned-off-by: Geunyoung Kim Acked-by: Seung-Woo Kim Acked-by: Inki Dae --- drivers/media/v4l2-core/videobuf2-core.c | 131 -- include/media/videobuf2-core.h | 33 ++-- include/media/videobuf2-v4l2.h |8 ++ include/trace/events/v4l2.h |5 +- 4 files changed, 106 insertions(+), 71 deletions(-) diff --git a/drivers/media/v4l2-core/videobuf2-core.c b/drivers/media/v4l2-core/videobuf2-core.c index 8c456f7..db685e8 100644 --- a/drivers/media/v4l2-core/videobuf2-core.c +++ b/drivers/media/v4l2-core/videobuf2-core.c @@ -193,7 +193,7 @@ static int __vb2_buf_mem_alloc(struct vb2_buffer *vb) { struct vb2_queue *q = vb->vb2_queue; enum dma_data_direction dma_dir = - V4L2_TYPE_IS_OUTPUT(q->type) ? DMA_TO_DEVICE : DMA_FROM_DEVICE; + q->is_output ? DMA_TO_DEVICE : DMA_FROM_DEVICE; void *mem_priv; int plane; @@ -347,7 +347,7 @@ static void __setup_offsets(struct vb2_queue *q, unsigned int n) * * Returns the number of buffers successfully allocated. */ -static int __vb2_queue_alloc(struct vb2_queue *q, enum v4l2_memory memory, +static int __vb2_queue_alloc(struct vb2_queue *q, enum vb2_memory memory, unsigned int num_buffers, unsigned int num_planes) { unsigned int buffer; @@ -370,7 +370,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum v4l2_memory memory, vb->memory = memory; /* Allocate video buffer memory for the MMAP type */ - if (memory == V4L2_MEMORY_MMAP) { + if (memory == VB2_MEMORY_MMAP) { ret = __vb2_buf_mem_alloc(vb); if (ret) { dprintk(1, "failed allocating memory for " @@ -397,7 +397,7 @@ static int __vb2_queue_alloc(struct vb2_queue *q, enum v4l2_memory memory, } __setup_lengths(q, buffer); - if (memory == V4L2_MEMORY_MMAP) + if (memory == VB2_MEMORY_MMAP) __setup_offsets(q, buffer); dprintk(1, "allocated %d buffers, %d plane(s) each\n", @@ -421,9 +421,9 @@ static void __vb2_free_mem(struct vb2_queue *q, unsigned int buffers) continue; /* Free MMAP buffers or release USERPTR buffers */ - if (q->memory == V4L2_MEMORY_MMAP) + if (q->memory == VB2_MEMORY_MMAP) __vb2_buf_mem_free(vb); - else if (q->memory == V4L2_MEMORY_DMABUF) + else if (q->memory == VB2_MEMORY_DMABUF) __vb2_buf_dmabuf_put(vb); else __vb2_buf_userptr_put(vb); @@ -562,7 +562,7 @@ static int __verify_planes_array(struct vb2_buffer *vb, const struct v4l2_buffer return -EINVAL; } - if (b->length < vb->num_planes || b->length > VIDEO_MAX_PLANES) { + if (b->length < vb->num_planes || b->length > VB2_MAX_PLANES) { dprintk(1, "incorrect planes array length, " "expected %d, got %d\n", vb->num_planes, b->length); return -EINVAL; @@ -586,8 +586,8 @@ static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b) if (V4L2_TYPE_IS_MULTIPLANAR(b->type)) { for (plane = 0; plane < vb->num_planes; ++plane) { - length = (b->memory == V4L2_MEMORY_USERPTR || - b->memory == V4L2_MEMORY_DMABUF) + length = (b->memory == VB2_MEMORY_USERPTR || + b->memory == VB2_MEMORY_DMABUF) ? b->m.planes[plane].length : vb->planes[plane].length; bytesused = b->m.planes[plane].bytesused @@ -601,7 +601,7 @@ static int __verify_length(struct vb2_buffer *vb, const struct v4l2_buffer *b) return -EINVAL; } } else { - length = (b->memory == V4L2_MEMORY_USERPTR) + length = (b->memory == VB2_MEMORY_USERPTR) ? b->length : vb->planes[0].length; if (b->bytesused > length) @@ -670,7 +670,7 @@ static void __fill_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b) b->reserved2 = 0; b->reserved = 0; - if (V4L2_TYPE_IS_MULTIPLANAR(q->type)) { + if (q->is_multiplanar) {
[PATCH] media: videobuf2: Add new uAPI for DVB streaming I/O
Add new uAPI for DVB to use streaming I/O which is implemented based on videobuf2. - DMX_REQBUFS : Request kernel to allocate buffers which count and size are dedicated by user. - DMX_QUERYBUF : Get the buffer information like a memory offset which will mmap() and be shared with user-space. - DMX_EXPBUF : Just for testing whether buffer-exporting success or not. - DMX_QBUF : Pass the buffer to kernel-space. - DMX_DQBUF : Get back the buffer which may contain TS data. Signed-off-by: Junghak SungSigned-off-by: Geunyoung Kim Acked-by: Seung-Woo Kim Acked-by: Inki Dae --- drivers/media/dvb-core/Makefile |2 +- drivers/media/dvb-core/dmxdev.c | 189 +++--- drivers/media/dvb-core/dmxdev.h |4 + drivers/media/dvb-core/dvb_vb2.c | 406 ++ drivers/media/dvb-core/dvb_vb2.h | 69 +++ include/uapi/linux/dvb/dmx.h | 66 ++- 6 files changed, 709 insertions(+), 27 deletions(-) create mode 100644 drivers/media/dvb-core/dvb_vb2.c create mode 100644 drivers/media/dvb-core/dvb_vb2.h diff --git a/drivers/media/dvb-core/Makefile b/drivers/media/dvb-core/Makefile index 8f22bcd..9b2e4e9 100644 --- a/drivers/media/dvb-core/Makefile +++ b/drivers/media/dvb-core/Makefile @@ -6,6 +6,6 @@ dvb-net-$(CONFIG_DVB_NET) := dvb_net.o dvb-core-objs := dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o\ dvb_ca_en50221.o dvb_frontend.o\ -$(dvb-net-y) dvb_ringbuffer.o dvb_math.o +$(dvb-net-y) dvb_ringbuffer.o dvb_vb2.o dvb_math.o obj-$(CONFIG_DVB_CORE) += dvb-core.o diff --git a/drivers/media/dvb-core/dmxdev.c b/drivers/media/dvb-core/dmxdev.c index d0e3f9d..d386abe 100644 --- a/drivers/media/dvb-core/dmxdev.c +++ b/drivers/media/dvb-core/dmxdev.c @@ -30,6 +30,7 @@ #include #include #include "dmxdev.h" +#include "dvb_vb2.h" static int debug; @@ -136,14 +137,8 @@ static int dvb_dvr_open(struct inode *inode, struct file *file) return -ENODEV; } - if ((file->f_flags & O_ACCMODE) == O_RDWR) { - if (!(dmxdev->capabilities & DMXDEV_CAP_DUPLEX)) { - mutex_unlock(>mutex); - return -EOPNOTSUPP; - } - } - - if ((file->f_flags & O_ACCMODE) == O_RDONLY) { + if (((file->f_flags & O_ACCMODE) == O_RDONLY) + || ((file->f_flags & O_ACCMODE) == O_RDWR)) { void *mem; if (!dvbdev->readers) { mutex_unlock(>mutex); @@ -155,6 +150,8 @@ static int dvb_dvr_open(struct inode *inode, struct file *file) return -ENOMEM; } dvb_ringbuffer_init(>dvr_buffer, mem, DVR_BUFFER_SIZE); + dvb_vb2_init(>dvr_vb2_ctx, "dvr", + file->f_flags & O_NONBLOCK); dvbdev->readers--; } @@ -192,7 +189,8 @@ static int dvb_dvr_release(struct inode *inode, struct file *file) dmxdev->demux->connect_frontend(dmxdev->demux, dmxdev->dvr_orig_fe); } - if ((file->f_flags & O_ACCMODE) == O_RDONLY) { + if (((file->f_flags & O_ACCMODE) == O_RDONLY) + || ((file->f_flags & O_ACCMODE) == O_RDWR)) { dvbdev->readers++; if (dmxdev->dvr_buffer.data) { void *mem = dmxdev->dvr_buffer.data; @@ -202,6 +200,9 @@ static int dvb_dvr_release(struct inode *inode, struct file *file) spin_unlock_irq(>lock); vfree(mem); } + if (dvb_vb2_is_streaming(>dvr_vb2_ctx)) + dvb_vb2_stream_off(>dvr_vb2_ctx); + dvb_vb2_release(>dvr_vb2_ctx); } /* TODO */ dvbdev->users--; @@ -358,7 +359,8 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len, struct dmxdev_filter *dmxdevfilter = filter->priv; int ret; - if (dmxdevfilter->buffer.error) { + if (!dvb_vb2_is_streaming(>vb2_ctx) + && dmxdevfilter->buffer.error) { wake_up(>buffer.queue); return 0; } @@ -369,11 +371,20 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len, } del_timer(>timer); dprintk("dmxdev: section callback %*ph\n", 6, buffer1); - ret = dvb_dmxdev_buffer_write(>buffer, buffer1, - buffer1_len); - if (ret == buffer1_len) { - ret = dvb_dmxdev_buffer_write(>buffer, buffer2, - buffer2_len); + + if (dvb_vb2_is_streaming(>vb2_ctx)) { + ret = dvb_vb2_fill_buffer(>vb2_ctx, + buffer1,
[PATCH] media: v4l-utils: dvbv5: Streaming I/O for DVB
Add a new scenario to use streaming I/O for TS recording. Signed-off-by: Junghak SungSigned-off-by: Geunyoung Kim Acked-by: Seung-Woo Kim Acked-by: Inki Dae --- include/linux/dvb/dmx.h | 64 utils/dvb/dvbv5-zap.c | 187 ++- 2 files changed, 249 insertions(+), 2 deletions(-) diff --git a/include/linux/dvb/dmx.h b/include/linux/dvb/dmx.h index 425a945..66fd43b 100644 --- a/include/linux/dvb/dmx.h +++ b/include/linux/dvb/dmx.h @@ -138,6 +138,64 @@ struct dmx_stc { __u64 stc; /* output: stc in 'base'*90 kHz units */ }; +/** + * struct dmx_buffer - dmx buffer info + * + * @index: id number of the buffer + * @bytesused: number of bytes occupied by data in the buffer (payload); + * @offset:for buffers with memory == DMX_MEMORY_MMAP; + * offset from the start of the device memory for this plane, + * (or a "cookie" that should be passed to mmap() as offset) + * @length:size in bytes of the buffer + * + * Contains data exchanged by application and driver using one of the streaming + * I/O methods. + */ +struct dmx_buffer { + __u32 index; + __u32 bytesused; + __u32 offset; + __u32 length; + __u32 reserved[4]; +}; + +/** + * struct dmx_requestbuffers - request dmx buffer information + * + * @count: number of requested buffers, + * @size: size in bytes of the requested buffer + * + * Contains data used for requesting a dmx buffer. + * All reserved fields must be set to zero. + */ +struct dmx_requestbuffers { + __u32 count; + __u32 size; + __u32 reserved[2]; +}; + +/** + * struct dmx_exportbuffer - export of dmx buffer as DMABUF file descriptor + * + * @index: id number of the buffer + * @flags: flags for newly created file, currently only O_CLOEXEC is + * supported, refer to manual of open syscall for more details + * @fd:file descriptor associated with DMABUF (set by driver) + * + * Contains data used for exporting a dmx buffer as DMABUF file descriptor. + * The buffer is identified by a 'cookie' returned by DMX_QUERYBUF + * (identical to the cookie used to mmap() the buffer to userspace). All + * reserved fields must be set to zero. The field reserved0 is expected to + * become a structure 'type' allowing an alternative layout of the structure + * content. Therefore this field should not be used for any other extensions. + */ +struct dmx_exportbuffer { + __u32 index; + __u32 flags; + __s32 fd; + __u32 reserved[5]; +}; + #define DMX_START_IO('o', 41) #define DMX_STOP _IO('o', 42) #define DMX_SET_FILTER _IOW('o', 43, struct dmx_sct_filter_params) @@ -150,4 +208,10 @@ struct dmx_stc { #define DMX_ADD_PID _IOW('o', 51, __u16) #define DMX_REMOVE_PID _IOW('o', 52, __u16) +#define DMX_REQBUFS _IOWR('o', 60, struct dmx_requestbuffers) +#define DMX_QUERYBUF _IOWR('o', 61, struct dmx_buffer) +#define DMX_EXPBUF _IOWR('o', 62, struct dmx_exportbuffer) +#define DMX_QBUF _IOWR('o', 63, struct dmx_buffer) +#define DMX_DQBUF_IOWR('o', 64, struct dmx_buffer) + #endif /* _DVBDMX_H_ */ diff --git a/utils/dvb/dvbv5-zap.c b/utils/dvb/dvbv5-zap.c index 2812166..eac146b 100644 --- a/utils/dvb/dvbv5-zap.c +++ b/utils/dvb/dvbv5-zap.c @@ -33,6 +33,7 @@ #include #include #include +#include #include @@ -71,6 +72,7 @@ struct arguments { unsigned n_apid, n_vpid, all_pids; enum dvb_file_formats input_format, output_format; unsigned traffic_monitor, low_traffic; + unsigned streaming; char *search; const char *cc; @@ -94,6 +96,7 @@ static const struct argp_option options[] = { {"pat", 'p', NULL, 0, N_("add pat and pmt to TS recording (implies -r)"), 0}, {"all-pids",'P', NULL, 0, N_("don't filter any pids. Instead, outputs all of them"), 0 }, {"record", 'r', NULL, 0, N_("set up /dev/dvb/adapterX/dvr0 for TS recording"), 0}, + {"streaming", 'R', NULL, 0, N_("uses streaming I/O for TS recording"), 0}, {"silence", 's', NULL, 0, N_("increases silence (can be used more than once)"), 0}, {"sat_number", 'S', N_("satellite_number"),0, N_("satellite number. If not specified, disable DISEqC"), 0}, {"timeout", 't', N_("seconds"), 0, N_("timeout for zapping and for recording"), 0}, @@ -449,6 +452,171 @@ static void
Re: [PATCH] media: videobuf2: Add new uAPI for DVB streaming I/O
Hi Junghak, [auto build test ERROR on v4.3-rc4 -- if it's inappropriate base, please ignore] config: x86_64-rhel (attached as .config) reproduce: # save the attached .config to linux build tree make ARCH=x86_64 All error/warnings (new ones prefixed by >>): >> drivers/media/dvb-core/dvb_vb2.c:32:5: warning: 'struct vb2_format' declared >> inside parameter list unsigned int sizes[], void *alloc_ctxs[]) ^ >> drivers/media/dvb-core/dvb_vb2.c:32:5: warning: its scope is only this >> definition or declaration, which is probably not what you want >> drivers/media/dvb-core/dvb_vb2.c:114:2: warning: initialization from >> incompatible pointer type .queue_setup = _queue_setup, ^ >> drivers/media/dvb-core/dvb_vb2.c:114:2: warning: (near initialization for >> 'dvb_vb2_qops.queue_setup') drivers/media/dvb-core/dvb_vb2.c: In function '_fill_dmx_buffer': >> drivers/media/dvb-core/dvb_vb2.c:128:15: error: 'struct vb2_buffer' has no >> member named 'index' b->index = vb->index; ^ >> drivers/media/dvb-core/dvb_vb2.c:129:27: error: 'struct vb2_plane' has no >> member named 'length' b->length = vb->planes[0].length; ^ >> drivers/media/dvb-core/dvb_vb2.c:130:30: error: 'struct vb2_plane' has no >> member named 'bytesused' b->bytesused = vb->planes[0].bytesused; ^ >> drivers/media/dvb-core/dvb_vb2.c:131:27: error: 'struct vb2_plane' has no >> member named 'm' b->offset = vb->planes[0].m.offset; ^ drivers/media/dvb-core/dvb_vb2.c: In function '_fill_vb2_buffer': drivers/media/dvb-core/dvb_vb2.c:143:11: error: 'struct vb2_plane' has no member named 'bytesused' planes[0].bytesused = 0; ^ drivers/media/dvb-core/dvb_vb2.c: At top level: >> drivers/media/dvb-core/dvb_vb2.c:149:21: error: variable 'dvb_vb2_buf_ops' >> has initializer but incomplete type static const struct vb2_buf_ops dvb_vb2_buf_ops = { ^ >> drivers/media/dvb-core/dvb_vb2.c:150:2: error: unknown field >> 'fill_user_buffer' specified in initializer .fill_user_buffer = _fill_dmx_buffer, ^ >> drivers/media/dvb-core/dvb_vb2.c:150:2: warning: excess elements in struct >> initializer >> drivers/media/dvb-core/dvb_vb2.c:150:2: warning: (near initialization for >> 'dvb_vb2_buf_ops') >> drivers/media/dvb-core/dvb_vb2.c:151:2: error: unknown field >> 'fill_vb2_buffer' specified in initializer .fill_vb2_buffer = _fill_vb2_buffer, ^ drivers/media/dvb-core/dvb_vb2.c:151:2: warning: excess elements in struct initializer drivers/media/dvb-core/dvb_vb2.c:151:2: warning: (near initialization for 'dvb_vb2_buf_ops') drivers/media/dvb-core/dvb_vb2.c: In function 'dvb_vb2_init': >> drivers/media/dvb-core/dvb_vb2.c:170:3: error: 'struct vb2_queue' has no >> member named 'buf_ops' q->buf_ops = _vb2_buf_ops; ^ >> drivers/media/dvb-core/dvb_vb2.c:173:2: error: implicit declaration of >> function 'vb2_core_queue_init' [-Werror=implicit-function-declaration] ret = vb2_core_queue_init(q); ^ drivers/media/dvb-core/dvb_vb2.c: In function 'dvb_vb2_release': >> drivers/media/dvb-core/dvb_vb2.c:198:3: error: implicit declaration of >> function 'vb2_core_queue_release' [-Werror=implicit-function-declaration] vb2_core_queue_release(q); ^ drivers/media/dvb-core/dvb_vb2.c: In function 'dvb_vb2_stream_on': >> drivers/media/dvb-core/dvb_vb2.c:211:2: error: implicit declaration of >> function 'vb2_core_streamon' [-Werror=implicit-function-declaration] ret = vb2_core_streamon(q, q->type); ^ drivers/media/dvb-core/dvb_vb2.c: In function 'dvb_vb2_stream_off': >> drivers/media/dvb-core/dvb_vb2.c:237:2: error: implicit declaration of >> function 'vb2_core_streamoff' [-Werror=implicit-function-declaration] ret = vb2_core_streamoff(q, q->type); ^ drivers/media/dvb-core/dvb_vb2.c: In function 'dvb_vb2_reqbufs': >> drivers/media/dvb-core/dvb_vb2.c:322:2: error: implicit declaration of >> function 'vb2_core_reqbufs' [-Werror=implicit-function-declaration] ret = vb2_core_reqbufs(>vb_q, VB2_MEMORY_MMAP, >count); ^ >> drivers/media/dvb-core/dvb_vb2.c:322:37: error: 'VB2_MEMORY_MMAP' undeclared >> (first use in this function) ret = vb2_core_reqbufs(>vb_q, VB2_MEMORY_MMAP, >count); ^ drivers/media/dvb-core/dvb_vb2.c:322:37: note: each undeclared identifier is reported only once for each function it appears in drivers/media/dvb-core/dvb_vb2.c: In function 'dvb_vb2_querybuf': vim +128 drivers/media/dvb-core/dvb_vb2.c 26 if (vb2_debug >= level) \ 27 pr_info("vb2: %s: " fmt, __func__, ## arg); \ 28 } while (0) 29 30 static int _queue_setup(struct vb2_queue *vq, const struct vb2_format *fmt, 31
Re: [PATCH] media: videobuf2: Add new uAPI for DVB streaming I/O
Hi Junghak, [auto build test WARNING on v4.3-rc4 -- if it's inappropriate base, please ignore] reproduce: # apt-get install sparse make ARCH=x86_64 allmodconfig make C=1 CF=-D__CHECK_ENDIAN__ sparse warnings: (new ones prefixed by >>) >> drivers/media/dvb-core/dvb_vb2.c:114:35: sparse: incorrect type in >> initializer (incompatible argument 2 (different base types)) drivers/media/dvb-core/dvb_vb2.c:114:35:expected int ( *queue_setup )( ... ) drivers/media/dvb-core/dvb_vb2.c:114:35:got int ( static [toplevel] * )( ... ) drivers/media/dvb-core/dvb_vb2.c:128:22: sparse: no member 'index' in struct vb2_buffer drivers/media/dvb-core/dvb_vb2.c:129:34: sparse: no member 'length' in struct vb2_plane drivers/media/dvb-core/dvb_vb2.c:130:37: sparse: no member 'bytesused' in struct vb2_plane drivers/media/dvb-core/dvb_vb2.c:131:34: sparse: no member 'm' in struct vb2_plane drivers/media/dvb-core/dvb_vb2.c:143:18: sparse: no member 'bytesused' in struct vb2_plane drivers/media/dvb-core/dvb_vb2.c:150:10: sparse: unknown field name in initializer drivers/media/dvb-core/dvb_vb2.c:151:10: sparse: unknown field name in initializer drivers/media/dvb-core/dvb_vb2.c:170:10: sparse: no member 'buf_ops' in struct vb2_queue drivers/media/dvb-core/dvb_vb2.c:173:15: sparse: undefined identifier 'vb2_core_queue_init' drivers/media/dvb-core/dvb_vb2.c:198:17: sparse: undefined identifier 'vb2_core_queue_release' drivers/media/dvb-core/dvb_vb2.c:211:15: sparse: undefined identifier 'vb2_core_streamon' drivers/media/dvb-core/dvb_vb2.c:237:15: sparse: undefined identifier 'vb2_core_streamoff' drivers/media/dvb-core/dvb_vb2.c:322:15: sparse: undefined identifier 'vb2_core_reqbufs' drivers/media/dvb-core/dvb_vb2.c:340:15: sparse: undefined identifier 'vb2_core_querybuf' drivers/media/dvb-core/dvb_vb2.c:356:15: sparse: undefined identifier 'vb2_core_expbuf' drivers/media/dvb-core/dvb_vb2.c:372:15: sparse: undefined identifier 'vb2_core_qbuf' drivers/media/dvb-core/dvb_vb2.c:387:15: sparse: undefined identifier 'vb2_core_dqbuf' drivers/media/dvb-core/dvb_vb2.c:32:5: warning: 'struct vb2_format' declared inside parameter list unsigned int sizes[], void *alloc_ctxs[]) ^ drivers/media/dvb-core/dvb_vb2.c:32:5: warning: its scope is only this definition or declaration, which is probably not what you want drivers/media/dvb-core/dvb_vb2.c:114:18: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types] .queue_setup = _queue_setup, ^ drivers/media/dvb-core/dvb_vb2.c:114:18: note: (near initialization for 'dvb_vb2_qops.queue_setup') drivers/media/dvb-core/dvb_vb2.c: In function '_fill_dmx_buffer': drivers/media/dvb-core/dvb_vb2.c:128:15: error: 'struct vb2_buffer' has no member named 'index' b->index = vb->index; ^ drivers/media/dvb-core/dvb_vb2.c:129:27: error: 'struct vb2_plane' has no member named 'length' b->length = vb->planes[0].length; ^ drivers/media/dvb-core/dvb_vb2.c:130:30: error: 'struct vb2_plane' has no member named 'bytesused' b->bytesused = vb->planes[0].bytesused; ^ drivers/media/dvb-core/dvb_vb2.c:131:27: error: 'struct vb2_plane' has no member named 'm' b->offset = vb->planes[0].m.offset; ^ drivers/media/dvb-core/dvb_vb2.c: In function '_fill_vb2_buffer': drivers/media/dvb-core/dvb_vb2.c:143:11: error: 'struct vb2_plane' has no member named 'bytesused' planes[0].bytesused = 0; ^ drivers/media/dvb-core/dvb_vb2.c: At top level: drivers/media/dvb-core/dvb_vb2.c:149:21: error: variable 'dvb_vb2_buf_ops' has initializer but incomplete type static const struct vb2_buf_ops dvb_vb2_buf_ops = { ^ drivers/media/dvb-core/dvb_vb2.c:150:2: error: unknown field 'fill_user_buffer' specified in initializer .fill_user_buffer = _fill_dmx_buffer, ^ drivers/media/dvb-core/dvb_vb2.c:150:22: warning: excess elements in struct initializer .fill_user_buffer = _fill_dmx_buffer, ^ drivers/media/dvb-core/dvb_vb2.c:150:22: note: (near initialization for 'dvb_vb2_buf_ops') drivers/media/dvb-core/dvb_vb2.c:151:2: error: unknown field 'fill_vb2_buffer' specified in initializer .fill_vb2_buffer = _fill_vb2_buffer, ^ drivers/media/dvb-core/dvb_vb2.c:151:21: warning: excess elements in struct initializer .fill_vb2_buffer = _fill_vb2_buffer, ^ drivers/media/dvb-core/dvb_vb2.c:151:21: note: (near initialization for 'dvb_vb2_buf_ops') drivers/media/dvb-core/dvb_vb2.c: In function 'dvb_vb2_init': drivers/media/dvb-core/dvb_vb2.c:170:3: error: 'struct vb2_queue' has no member named 'buf_ops' q->buf_ops = _vb2_buf_ops; ^
Re: [PATCHv9 07/15] cec: add HDMI CEC framework
On Mon, Sep 07, 2015 at 03:44:36PM +0200, Hans Verkuil wrote: > From: Hans Verkuil> > The added HDMI CEC framework provides a generic kernel interface for > HDMI CEC devices. > > Signed-off-by: Hans Verkuil > [k.deb...@samsung.com: Merged CEC Updates commit by Hans Verkuil] > [k.deb...@samsung.com: Merged Update author commit by Hans Verkuil] > [k.deb...@samsung.com: change kthread handling when setting logical > address] > [k.deb...@samsung.com: code cleanup and fixes] > [k.deb...@samsung.com: add missing CEC commands to match spec] > [k.deb...@samsung.com: add RC framework support] > [k.deb...@samsung.com: move and edit documentation] > [k.deb...@samsung.com: add vendor id reporting] > [k.deb...@samsung.com: add possibility to clear assigned logical > addresses] > [k.deb...@samsung.com: documentation fixes, clenaup and expansion] > [k.deb...@samsung.com: reorder of API structs and add reserved fields] > [k.deb...@samsung.com: fix handling of events and fix 32/64bit timespec > problem] > [k.deb...@samsung.com: add cec.h to include/uapi/linux/Kbuild] > [k.deb...@samsung.com: add sequence number handling] > [k.deb...@samsung.com: add passthrough mode] > [k.deb...@samsung.com: fix CEC defines, add missing CEC 2.0 commands] > minor additions] > Signed-off-by: Kamil Debski > Signed-off-by: Hans Verkuil I don't see much in the way of support for source devices in this: how do we handle hotplug of the sink, and how to do we configure the physical address? Surely you aren't proposing that drivers should write directly to adap->phys_addr without calling some notification function that the physical address has changed? Please can you give some guidance on how a HDMI source bridge driver should deal with these issues. Thanks. -- FTTC broadband for 0.8mile line: currently at 9.6Mbps down 400kbps up according to speedtest.net. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: drivers/media/pci/netup_unidvb/netup_unidvb_core.c:417:18: error: too many arguments to function 'horus3a_attach'
Hello Fengguang, On Sun, Oct 4, 2015 at 11:43 PM, kbuild test robotwrote: > Hi Kozlov, > > FYI, the error/warning still remains. > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git > master > head: 049e6dde7e57f0054fdc49102e7ef4830c698b46 > commit: 52b1eaf4c59a3bbd07afbb4ab4f43418a807d02e [media] netup_unidvb: NetUP > Universal DVB-S/S2/T/T2/C PCI-E card driver > date: 8 weeks ago > config: x86_64-randconfig-n0-10050530 (attached as .config) > reproduce: > git checkout 52b1eaf4c59a3bbd07afbb4ab4f43418a807d02e > # save the attached .config to linux build tree > make ARCH=x86_64 > > All error/warnings (new ones prefixed by >>): > >In file included from > drivers/media/pci/netup_unidvb/netup_unidvb_core.c:34:0: >drivers/media/dvb-frontends/horus3a.h:51:13: warning: 'struct > cxd2820r_config' declared inside parameter list > struct i2c_adapter *i2c) > A fix for this build issue is already queued [0] in the media_tree fixes branch and AFAIU it will be pushed to mainline soon. Best regards, Javier [0]: http://git.linuxtv.org/cgit.cgi/media_tree.git/commit/?h=fixes=de5abc98bf34e06d7accd943c4057843db921f00 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html