From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mailout2.w1.samsung.com ([210.118.77.12]:14124 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755299AbaHAMbA (ORCPT ); Fri, 1 Aug 2014 08:31:00 -0400 Received: from eucpsbgm1.samsung.com (unknown [203.254.199.244]) by mailout2.w1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0N9M00H6BO34R630@mailout2.w1.samsung.com> for linux-media@vger.kernel.org; Fri, 01 Aug 2014 13:30:40 +0100 (BST) Message-id: <53DB8883.4010102@samsung.com> Date: Fri, 01 Aug 2014 14:30:59 +0200 From: Marek Szyprowski MIME-version: 1.0 To: Hans Verkuil , Linux Media Mailing List Cc: Pawel Osciak Subject: Re: [PATCH for v3.17] videobuf2-dma-sg: fix for wrong GFP mask to sg_alloc_table_from_pages References: <53DB85AA.3010207@xs4all.nl> In-reply-to: <53DB85AA.3010207@xs4all.nl> Content-type: text/plain; charset=UTF-8; format=flowed Content-transfer-encoding: 7bit Sender: linux-media-owner@vger.kernel.org List-ID: Hello, On 2014-08-01 14:18, Hans Verkuil wrote: > sg_alloc_table_from_pages() only allocates a sg_table, so it should just use > GFP_KERNEL, not gfp_flags. If gfp_flags contains __GFP_DMA32 then mm/sl[au]b.c > will call BUG_ON: > > [ 358.027515] ------------[ cut here ]------------ > [ 358.027546] kernel BUG at mm/slub.c:1416! > [ 358.027558] invalid opcode: 0000 [#1] PREEMPT SMP > [ 358.027576] Modules linked in: mt2131 s5h1409 tda8290 tuner cx25840 cx23885 btcx_risc altera_ci tda18271 altera_stapl videobuf2_dvb tveeprom cx2341x videobuf2_dma_sg dvb_core rc_core videobuf2_memops videobuf2_core nouveau zr36067 videocodec v4l2_common videodev media x86_pkg_temp_thermal cfbfillrect cfbimgblt cfbcopyarea ttm drm_kms_helper processor button isci > [ 358.027712] CPU: 19 PID: 3654 Comm: cat Not tainted 3.16.0-rc6-telek #167 > [ 358.027723] Hardware name: ASUSTeK COMPUTER INC. Z9PE-D8 WS/Z9PE-D8 WS, BIOS 5404 02/10/2014 > [ 358.027741] task: ffff880897c7d960 ti: ffff88089b4d4000 task.ti: ffff88089b4d4000 > [ 358.027753] RIP: 0010:[] [] new_slab+0x280/0x320 > [ 358.027776] RSP: 0018:ffff88089b4d7ae8 EFLAGS: 00010002 > [ 358.027787] RAX: ffff880897c7d960 RBX: 0000000000000000 RCX: ffff88089b4d7b50 > [ 358.027798] RDX: 00000000ffffffff RSI: 0000000000000004 RDI: ffff88089f803b00 > [ 358.027809] RBP: ffff88089b4d7bb8 R08: 0000000000000000 R09: 0000000100400040 > [ 358.027821] R10: 0000160000000000 R11: ffff88109bc02c40 R12: 0000000000000001 > [ 358.027832] R13: ffff88089f8000c0 R14: ffff88089f803b00 R15: ffff8810bfcf4be0 > [ 358.027845] FS: 00007f83fe5c0700(0000) GS:ffff8810bfce0000(0000) knlGS:0000000000000000 > [ 358.027858] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > [ 358.027868] CR2: 0000000001dfd568 CR3: 0000001097d5a000 CR4: 00000000000407e0 > [ 358.027878] Stack: > [ 358.027885] ffffffff81198860 ffff8810bfcf4be0 ffff880897c7d960 0000000000001b00 > [ 358.027905] ffff880897c7d960 0000000000000000 ffff8810bfcf4bf0 0000000000000000 > [ 358.027924] 0000000000000000 0000000100000100 ffffffff813ef84a 00000004ffffffff > [ 358.027944] Call Trace: > [ 358.027956] [] ? __slab_alloc+0x400/0x4e0 > [ 358.027973] [] ? sg_kmalloc+0x1a/0x30 > [ 358.027985] [] __kmalloc+0x127/0x150 > [ 358.027997] [] ? sg_kmalloc+0x1a/0x30 > [ 358.028009] [] sg_kmalloc+0x1a/0x30 > [ 358.028023] [] __sg_alloc_table+0x74/0x180 > [ 358.028035] [] ? sg_kfree+0x20/0x20 > [ 358.028048] [] sg_alloc_table+0x1f/0x60 > [ 358.028061] [] sg_alloc_table_from_pages+0x84/0x1f0 > [ 358.028077] [] vb2_dma_sg_alloc+0x159/0x230 [videobuf2_dma_sg] > [ 358.028095] [] __vb2_queue_alloc+0x10a/0x680 [videobuf2_core] > [ 358.028113] [] __reqbufs.isra.14+0x220/0x3e0 [videobuf2_core] > [ 358.028130] [] __vb2_init_fileio+0xbd/0x380 [videobuf2_core] > [ 358.028147] [] __vb2_perform_fileio+0x5b3/0x6e0 [videobuf2_core] > [ 358.028164] [] vb2_fop_read+0xb1/0x100 [videobuf2_core] > [ 358.028184] [] v4l2_read+0x65/0xb0 [videodev] > [ 358.028198] [] vfs_read+0x8f/0x170 > [ 358.028210] [] SyS_read+0x41/0xb0 > [ 358.028224] [] system_call_fastpath+0x16/0x1b > [ 358.028234] Code: 66 90 e9 dc fd ff ff 0f 1f 40 00 41 8b 4d 68 e9 d5 fe ff ff 0f 1f 80 00 00 00 00 f0 41 80 4d 00 40 e9 03 ff ff ff 0f 1f 44 00 00 <0f> 0b 66 0f 1f 44 00 00 44 89 c6 4c 89 45 d0 e8 0c 82 ff ff 48 > [ 358.028415] RIP [] new_slab+0x280/0x320 > [ 358.028432] RSP > [ 358.032208] ---[ end trace 6443240199c706e4 ]--- > > Signed-off-by: Hans Verkuil > Cc: stable@vger.kernel.org # for v3.13 and up Acked-by: Marek Szyprowski > diff --git a/drivers/media/v4l2-core/videobuf2-dma-sg.c b/drivers/media/v4l2-core/videobuf2-dma-sg.c > index adefc31..9b163a4 100644 > --- a/drivers/media/v4l2-core/videobuf2-dma-sg.c > +++ b/drivers/media/v4l2-core/videobuf2-dma-sg.c > @@ -113,7 +113,7 @@ static void *vb2_dma_sg_alloc(void *alloc_ctx, unsigned long size, gfp_t gfp_fla > goto fail_pages_alloc; > > ret = sg_alloc_table_from_pages(&buf->sg_table, buf->pages, > - buf->num_pages, 0, size, gfp_flags); > + buf->num_pages, 0, size, GFP_KERNEL); > if (ret) > goto fail_table_alloc; > Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland