From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Sricharan" Subject: RE: [PATCH V2 1/2] drivers: i2c: qup: Fix broken dma when CONFIG_DEBUG_SG is enabled Date: Mon, 16 May 2016 10:49:04 +0530 Message-ID: <000e01d1af32$7c05de40$74119ac0$@codeaurora.org> References: <1462534274-28925-1-git-send-email-sricharan@codeaurora.org> <1462534274-28925-2-git-send-email-sricharan@codeaurora.org> <20160513114716.GI1778@katana> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from smtp.codeaurora.org ([198.145.29.96]:51023 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750753AbcEPFTP (ORCPT ); Mon, 16 May 2016 01:19:15 -0400 In-Reply-To: <20160513114716.GI1778@katana> Content-Language: en-us Sender: linux-i2c-owner@vger.kernel.org List-Id: linux-i2c@vger.kernel.org To: 'Wolfram Sang' Cc: devicetree@vger.kernel.org, architt@codeaurora.org, linux-arm-msm@vger.kernel.org, ntelkar@codeaurora.org, galak@codeaurora.org, linux-kernel@vger.kernel.org, andy.gross@linaro.org, linux-i2c@vger.kernel.org, iivanov@mm-sol.com, agross@codeaurora.org, dmaengine@vger.kernel.org, linux-arm-kernel@lists.infradead.org, nkaje@codeaurora.org Hi, > > With CONFIG_DEBUG_SG is enabled and when dma mode is used, below > dump > > is seen, > > > > ------------[ cut here ]------------ > > kernel BUG at include/linux/scatterlist.h:140! > > Internal error: Oops - BUG: 0 [#1] PREEMPT SMP Modules linked in: > > CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.4.0-00459-g9f087b9-dirty > > #7 Hardware name: Qualcomm Technologies, Inc. APQ 8016 SBC (DT) > > task: ffffffc036868000 ti: ffffffc036870000 task.ti: ffffffc036870000 > > PC is at qup_sg_set_buf.isra.13+0x138/0x154 > > LR is at qup_sg_set_buf.isra.13+0x50/0x154 pc : [] > > lr : [] pstate: 60000145 sp : ffffffc0368735c0 > > x29: ffffffc0368735c0 x28: ffffffc036873752 > > x27: ffffffc035233018 x26: ffffffc000c4e000 > > x25: 0000000000000000 x24: 0000000000000004 > > x23: 0000000000000000 x22: ffffffc035233668 > > x21: ffffff80004e3000 x20: ffffffc0352e0018 > > x19: 0000004000000000 x18: 0000000000000028 > > x17: 0000000000000004 x16: ffffffc0017a39c8 > > x15: 0000000000001cdf x14: ffffffc0019929d8 > > x13: ffffffc0352e0018 x12: 0000000000000000 > > x11: 0000000000000001 x10: 0000000000000001 > > x9 : ffffffc0012b2d70 x8 : ffffff80004e3000 > > x7 : 0000000000000018 x6 : 0000000030000000 > > x5 : ffffffc00199f018 x4 : ffffffc035233018 > > x3 : 0000000000000004 x2 : 00000000c0000000 > > x1 : 0000000000000003 x0 : 0000000000000000 > > > > Process swapper/0 (pid: 1, stack limit = 0xffffffc036870020) > > Stack: (0xffffffc0368735c0 to 0xffffffc036874000) > > > > Change allocation of sg buffers from dma_coherent memory to kzalloc to > > fix the issue. > > This description describes what you do. But not why it is the correct solution > to the OOPS. The OOPS neither describes it. Please add some more > explanation. > Ok,will describe it more. The reason it oops is sg_set_bug expects that the buf parameter passed in should be a from the lowmem and a valid pageframe. This is not true for pages from dma_alloc_coherent which can be carveouts, hence the check fails. Allocating buffers using kzalloc fixes the issue. Regards, Sricharan