Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp911983ybf; Thu, 27 Feb 2020 01:51:05 -0800 (PST) X-Google-Smtp-Source: APXvYqxAiJDZrzadHlcx9BOXvq1OeqYQ/FTt3edShMRqC53DhXh90/OQmctdbn7ydXGa62dF2X6J X-Received: by 2002:a9d:dc1:: with SMTP id 59mr2567172ots.250.1582797065699; Thu, 27 Feb 2020 01:51:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582797065; cv=none; d=google.com; s=arc-20160816; b=jwrIUEkItRepfKVBslsJS65fxPY7VOFWMO+BsJ3gpr0VQ0wct0nul7aAUItbMG+/nT q4FO0ldP4gElBG4TOyPeyi6RdjTP1swXsUeTRM7Bq5oj+uHRDJzl21X7OJgQNAhbTtlv uWfBXCNnmrAr1JD8hRfpxHDa982M357yUDkswUNUDU7pLIrWRU6t5CnyhjurUTc61zm2 C7llwDcqroymholI8xzrOXlnuI0skei3B6lAI+sU2IsP8n2X+kt8wlsuvWKLDOKRyoww kkeVKpy/kl/0pIGVgAy097CEpa7uGaKLXriTog4OBfz2txxk+XOsY1DTGlUMxdlhqhKA PSkQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=ByJVUEPLZ7tIhy2q8vr9cuIU5zHaJVyikWn1UOZGCH0=; b=ltJdGUbFuNYl1atDw5OMqCzCa4IGrTXDoCHKsMlwpRtQJBTL8er1IhK1Si+24X8laB /6COHmyZGWf49bhF9y+RpZTJQ59Qw6qXRtB67EqDlLwPzzYgEM2JWjEJcyO9VwW88XQD NPEKR3EAqFGgMtmnzmEe0wywWJ7g5DkwIcMLB5B7oNffHlMLJctOBMUzvy4yx6k4tpIU UaV2Q2lFG3e3gfrwHQZlbz68ZeE+0ckyK2f8ZQbouctgzHw6GTVsecb1I3eV1EGNgrtL oO1Y0pA/z34h2CM5Yyvn8YLgao0XNfaRr7BX4ECKa/zT9kdxMBi+UVPe/mBeTRmOEic0 3Gjw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xs4all.nl header.s=s1 header.b=jAldvDjU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l15si1094208oic.220.2020.02.27.01.50.53; Thu, 27 Feb 2020 01:51:05 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xs4all.nl header.s=s1 header.b=jAldvDjU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728734AbgB0Jur (ORCPT + 99 others); Thu, 27 Feb 2020 04:50:47 -0500 Received: from lb3-smtp-cloud7.xs4all.net ([194.109.24.31]:39633 "EHLO lb3-smtp-cloud7.xs4all.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728666AbgB0Juq (ORCPT ); Thu, 27 Feb 2020 04:50:46 -0500 Received: from [IPv6:2001:420:44c1:2577:f10e:c7d:8cc0:4dc1] ([IPv6:2001:420:44c1:2577:f10e:c7d:8cc0:4dc1]) by smtp-cloud7.xs4all.net with ESMTPA id 7FoQjCsjZjmHT7FoTjhgWE; Thu, 27 Feb 2020 10:50:44 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xs4all.nl; s=s1; t=1582797044; bh=ByJVUEPLZ7tIhy2q8vr9cuIU5zHaJVyikWn1UOZGCH0=; h=Subject:To:From:Message-ID:Date:MIME-Version:Content-Type:From: Subject; b=jAldvDjUP+2sch8FAjl3tRgQbtP30TxMccHRfBTx0AG7qcuIATR+YS9Nz2VyI7z6b 2bdvHiX6Z/L6mJI7b4nv54bKnRliMEVQM7ySwyQNAkoDNchfxN8t4CYHzfevXfB9f8 LybufA3No+1VRB5FQcWflrscC6WbERot2gpInO67/M0n6IFDADfiZx2PIF3g4pSwHx z/7p8fhwJ085la0RM6nw3Uw2TbL/on46LEYh1L4i8LFEemmBCgZg8m8lvoTBW42kTb lmP1Ema0sJ4YMTnvpQQV7+hlWMN1SEz349s++ZvojelgkPLdmfbl7iI+GBcwETKL68 d1DrVrZF7v6fw== Subject: Re: [PATCH v3] media: mtk-vpu: avoid unaligned access to DTCM buffer. To: Hsin-Yi Wang , linux-arm-kernel@lists.infradead.org Cc: Minghsiu Tsai , Houlong Wei , Andrew-CT Chen , Tiffany Lin , Mauro Carvalho Chehab , Matthias Brugger , Enric Balletbo i Serra , linux-media@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org References: <20200225172437.106679-1-hsinyi@chromium.org> From: Hans Verkuil Message-ID: <6986e879-cf35-13a5-baae-9ab09ba1a0d7@xs4all.nl> Date: Thu, 27 Feb 2020 10:50:34 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: <20200225172437.106679-1-hsinyi@chromium.org> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-CMAE-Envelope: MS4wfEmWyewWtYOmHee0wLG9KVhzvdC+vZ2Yn3M5QK7toJOjegKaoNuwTebMFlNUkX4g5ubItYRWYyIhs9fGxCf8cD1rUEnuEdF4lkw2Txy5JZSTdCcXpB5B pzO5NkIdXaxs9P+pVHBrmJIkOsU5Eroa9DV8ZTMnglUWubr8LP9y9m4lrANhiZiELvr2vgtUaNnUrH/z4wjpIQouugabPCkx5QqnrCnfi2V6tgsdVHr8zOA8 mskhshBV7XjDMTd5xLYZ0Sm9OpE9a0gr0ElTGRjFT+FJQNuLIVgUwDTN961nhIssd25SFvemCatJXt34OY1tWo5jOU+tteyyXulpyXgchGIMPBQTTaJL4Ji/ BDZeOQ+aZfeJoA0ppicA6MUd7/lCyKg6hL1KWvDnx/ZLDMY6VT1KNZ9+CVD6Y4XoIfaYgurc68lAMRXyukwMzOUhuDJ/fXoZyVy7cakzf2yVCHIFr1MQkom2 6uXVTJbJJ2ntKSdMcuzDzxxLVI/BioY4HHz9HrFB0kvsXSZ85OlEwY/El9R2R4b62kVs1vAMd79qJR06ewzsBO5vcefSk/KCV3UTXq0dtsHArbHy35bC8iLR Rah4L33UxuNXea6VawerW38hGGj3VKbG0GGWnNC73+Jstfp45IVOhkAtbTCX7EpKdn0ZIfFxhHTwpxpDIZAvShcQMHLyEncijo0icB4e/D51NB9J3TYHYJbP PGwtJwvHsA+s8xkxnt2oMOeUDgII1xG2 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2/25/20 6:24 PM, Hsin-Yi Wang wrote: > struct vpu_run *run in vpu_init_ipi_handler() is an ioremapped DTCM (Data > Tightly Coupled Memory) buffer shared with AP. It's not able to do > unaligned access. Otherwise kernel would crash due to unable to handle > kernel paging request. > > struct vpu_run { > u32 signaled; > char fw_ver[VPU_FW_VER_LEN]; > unsigned int dec_capability; > unsigned int enc_capability; > wait_queue_head_t wq; > }; > > fw_ver starts at 4 byte boundary. If system enables > CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS, strscpy() will do > read_word_at_a_time(), which tries to read 8-byte: *(unsigned long *)addr > > Copy the string by memcpy_fromio() for this buffer to avoid unaligned > access. > > Fixes: 85709cbf1524 ("media: replace strncpy() by strscpy()") > Signed-off-by: Hsin-Yi Wang > --- > Change in v3: > - fix sparse warnings. > Change in v2: > - fix sparse warnings. > --- > drivers/media/platform/mtk-vpu/mtk_vpu.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/drivers/media/platform/mtk-vpu/mtk_vpu.c b/drivers/media/platform/mtk-vpu/mtk_vpu.c > index a768707abb94..e3fd2d1814f3 100644 > --- a/drivers/media/platform/mtk-vpu/mtk_vpu.c > +++ b/drivers/media/platform/mtk-vpu/mtk_vpu.c > @@ -603,12 +603,14 @@ EXPORT_SYMBOL_GPL(vpu_load_firmware); > static void vpu_init_ipi_handler(void *data, unsigned int len, void *priv) > { > struct mtk_vpu *vpu = (struct mtk_vpu *)priv; > - struct vpu_run *run = (struct vpu_run *)data; > - > - vpu->run.signaled = run->signaled; > - strscpy(vpu->run.fw_ver, run->fw_ver, sizeof(vpu->run.fw_ver)); > - vpu->run.dec_capability = run->dec_capability; > - vpu->run.enc_capability = run->enc_capability; > + struct vpu_run __iomem *run = (struct vpu_run __iomem __force *)data; The use of __force is generally a bad sign. Shouldn't the 'void *data' be a 'void __iomem *data'? And vpu->recv_buf should be 'struct share_obj __iomem *recv_buf;'. Probably send_buf as well. In other words, the __iomem attribute should be wired up correctly throughout the driver code, and not forcibly applied in one place. That is asking for trouble in the future. Also, sparse only works well in detecting problems if such attributes are applied at the right level. Regards, Hans > + > + vpu->run.signaled = readl(&run->signaled); > + memcpy_fromio(vpu->run.fw_ver, run->fw_ver, sizeof(vpu->run.fw_ver)); > + /* Make sure the string is NUL-terminated */ > + vpu->run.fw_ver[sizeof(vpu->run.fw_ver) - 1] = '\0'; > + vpu->run.dec_capability = readl(&run->dec_capability); > + vpu->run.enc_capability = readl(&run->enc_capability); > wake_up_interruptible(&vpu->run.wq); > } > >