From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,FAKE_REPLY_C,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 97F67C12002 for ; Mon, 19 Jul 2021 07:59:10 +0000 (UTC) Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 3BCB8611AE for ; Mon, 19 Jul 2021 07:59:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3BCB8611AE Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=oracle.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=iommu-bounces@lists.linux-foundation.org Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 0929A60632; Mon, 19 Jul 2021 07:59:10 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1SAikYs6zYnH; Mon, 19 Jul 2021 07:59:08 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id 8EA5360618; Mon, 19 Jul 2021 07:59:08 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 4A4AAC001A; Mon, 19 Jul 2021 07:59:08 +0000 (UTC) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id C44D5C000E for ; Mon, 19 Jul 2021 07:59:06 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id B0F5C40358 for ; Mon, 19 Jul 2021 07:59:06 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Authentication-Results: smtp4.osuosl.org (amavisd-new); dkim=pass (2048-bit key) header.d=oracle.com header.b="JFj/IbYy"; dkim=pass (2048-bit key) header.d=oracle.com header.b="dVsXrAgx"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.b="wJvlPhVs" Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Py5J8NBkMrZM for ; Mon, 19 Jul 2021 07:59:04 +0000 (UTC) X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by smtp4.osuosl.org (Postfix) with ESMTPS id 8A9994029E for ; Mon, 19 Jul 2021 07:59:04 +0000 (UTC) Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 16J7uOUQ030305; Mon, 19 Jul 2021 07:58:44 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc : subject : message-id : content-type : in-reply-to : mime-version; s=corp-2021-07-09; bh=D6m1oepGTbl3LmykfBIE8AgqnlAmjohnEyJ+Fnh/85M=; b=JFj/IbYya/Q/ob32AN4ernV1co2pqyAU742SX00XEH5DHqt+R6c8yFzHUGsE8Ro2D+Gg tGMaC5vrkmYJOpRguMtZR2iZcHrLdn4WfNYaS6qYaSZ9B/EOGmez0icu5/jr8IU6mKdN tUM7ISlRuPCqtL4KPIMwJsdLb44nL2RKCSTQcEHXnX9ljzjKQgLD2enjWoZSFZT0Std4 yd0i4uNJOag+GIx88cPTdx2zDstSfXceDkBfeamImEJ0J/b+GZ4GSUZgD5LAvZvz4LZC beGUrjRL8SBGjuXJpMw2P6HFbRLLndlMTYnRhmeIFq/896tEa5rFLGVLi0+/cdh4Llwx dg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=date : from : to : cc : subject : message-id : content-type : in-reply-to : mime-version; s=corp-2020-01-29; bh=D6m1oepGTbl3LmykfBIE8AgqnlAmjohnEyJ+Fnh/85M=; b=dVsXrAgxXVCPEtJYluSgWlOVHTlRkv+XjVuzJfx0kRKz4aKA49jIY4ibWFq+zvdHF5ZF Xo/cjEEsYgt8yb6y6VLQBFuyOXwrRcr63V5ibtALp3E+mdw0cfqY9GjDVZ27uBBFfYVx eg+GdauMJv8lpRfuhUVXu2QHQRpPV48Ro9QsQpngPmdYKnYS9Nwuxmd4JF3Fx3VyC3Y1 GtTGdzJbUrjFtTRnsqLIaU/tHoW5L+mXF8U8WScGQ8NDZHaT0Oy9nP1vRHyo4qeBA/LY 2Uu30WCQ1ajg/jrJjewZywjNKeE8ienbGPvExuVtdjFP0Ysiv5szxHZ/llUE1f7f57fC JQ== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by mx0b-00069f02.pphosted.com with ESMTP id 39vpkwrtvr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 19 Jul 2021 07:58:44 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 16J7tGuX182889; Mon, 19 Jul 2021 07:58:43 GMT Received: from nam10-mw2-obe.outbound.protection.outlook.com (mail-mw2nam10lp2105.outbound.protection.outlook.com [104.47.55.105]) by aserp3020.oracle.com with ESMTP id 39uq148yvn-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 19 Jul 2021 07:58:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HLUR+ypuBm0wSi9l+jxAUHRpZKOpZMcryINAuXrPf9ADb6jsMrOZbwJ4OuJqrBGbOgpXIz8Qhv1PvqyrltH/LCBLUP79idhraclIR3M1eL7vxVUkGGOpQQtoO85kELtHkTWohSVLnKHoXfGddJDoJXWkOJTFWal6OKQi+seEDuh9ez/O+ZNLMbsNTAV/DcwYoVrQVkyYC0WGzmAjqcMqXH+qmQIdfPt0rWSa5Rwu5AdbQhZzybYvrZsaMH7VnOoH2V8dT7vp3hZmYxD1vKptpws6CnZP+e/m9bZfluZbc1xtFOOpmVRuI+xvLvzZIPJfyChkMgEibZgKux7Y6hk3Cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D6m1oepGTbl3LmykfBIE8AgqnlAmjohnEyJ+Fnh/85M=; b=l3CKSTE5RLCUt2AiPGcvzWvQwilZaDpDk73WmlNOv3WL+ZvxUzZ0EVg7He8vsJHOs/5S9XWtKwCBgquDfXHVj9AtjsTtG63R+MYIn5jkTkUDY4NVBWxdwZD3zSSxU9rq/NMyWSa22pPxniIqhKkzLw7RhUJ0kW2pdSI73J2OSLjW21medDW+D32uoNU4uRLHR4GSdh3WM5jfqTbxHjiRBWKgTianXao2EtNlXiDyAyE0k43KmQM41kxpxpmi9tP8WJO6b116pwqcXtnvrMX+eWqJtVGMZmuFtlU9ZxvQrDSJDwZo0x3LHfZmCesmZDixWg1FlWM2HyUIA0EP9+/Hvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=D6m1oepGTbl3LmykfBIE8AgqnlAmjohnEyJ+Fnh/85M=; b=wJvlPhVsatwpqSYeh1N4BDZ5pUssZKpvrrEqoUSd0ji9zrttMuKFUcmGuGY/yr3BbTDdCO+FLDq5m5rn+MHK0xG+u14vtufxEt9RDSqiwfL58RIfw6VzfwG7gt4rlNVtxld9TEHYeCiE/sL2LzPICmSeCmZgAJVCxAUHxVWfGNo= Authentication-Results: lists.01.org; dkim=none (message not signed) header.d=none;lists.01.org; dmarc=none action=none header.from=oracle.com; Received: from MWHPR1001MB2365.namprd10.prod.outlook.com (2603:10b6:301:2d::28) by CO1PR10MB4689.namprd10.prod.outlook.com (2603:10b6:303:98::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21; Mon, 19 Jul 2021 07:58:41 +0000 Received: from MWHPR1001MB2365.namprd10.prod.outlook.com ([fe80::5820:e42b:73d7:4268]) by MWHPR1001MB2365.namprd10.prod.outlook.com ([fe80::5820:e42b:73d7:4268%7]) with mapi id 15.20.4331.033; Mon, 19 Jul 2021 07:58:41 +0000 Date: Mon, 19 Jul 2021 10:58:09 +0300 From: Dan Carpenter To: kbuild@lists.01.org, John Garry , joro@8bytes.org, will@kernel.org, robin.murphy@arm.com, baolu.lu@linux.intel.com Subject: Re: [PATCH v4 6/6] dma-iommu: Pass iova len for IOVA domain init Message-ID: <202107150933.iNUojyx8-lkp@intel.com> Content-Disposition: inline In-Reply-To: <1626259003-201303-7-git-send-email-john.garry@huawei.com> User-Agent: Mutt/1.9.4 (2018-02-28) X-ClientProxiedBy: JNXP275CA0035.ZAFP275.PROD.OUTLOOK.COM (2603:1086:0:18::23) To MWHPR1001MB2365.namprd10.prod.outlook.com (2603:10b6:301:2d::28) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from kadam (102.222.70.252) by JNXP275CA0035.ZAFP275.PROD.OUTLOOK.COM (2603:1086:0:18::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.21 via Frontend Transport; Mon, 19 Jul 2021 07:58:32 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a8ef93c1-7387-45ee-c37e-08d94a8b05a9 X-MS-TrafficTypeDiagnostic: CO1PR10MB4689: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8882; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: F+eK/j+niPlPwjBUjyVXqqbhvVprlurB6MtsWs3uDQXKuxHBe/6ZXJNgbNXtwjqVVEBmW97bP1KPVdl67GoNX73XHShtbsQS2YuCSNJ0JRCpHwNceTvuYFAndT5zkRLWnrb2SV7IYduO8WtbbesFfkHvs8XdZi6KL7s4M1Vzrle7cB6jNuTU0W72L8CL2zRn5GYaHmgebmGSuwBhQp6O1cvkCMLWAMyFLsiXg8Gi1JIrhDNF2ZvCB+k2wmT+0tqGkp4zDELcRA9MW2wxL9OSL650QIdcJuqZrZWLccNHZ0v2LBUy3kFFrNgtWWT0jSlmip2lBCmGHg/t2YKgnL3nR55KzDekeCoKP+aBITOlrX+QrVgtxoFjbNdCdaw5NsOYqCNPWrD32ZmsMiDWlgiNkxMZUs7HRGJbcA+y8RUW0R9Dx/+T7J4PJYf1R01U9KOXD0UVTAb6yTi4qmO/5P6CA+IMMKHMv+y12WJbTHPg5sj4uZt7HZXeVTDLBPpnsD0kj6k25OulvvFTMYa1cIdOcOE0wNoogMZwdypGq/G+ylQBDvteCAxayh8TzPBWUxn7S8gUN6YrT9KPvn4XNw9E8jOf+wlnxzH2tcv8wXMcCrTuOWQSnhiAdmheoYzGe+1gIJDYSgMTo82WpEEyPr80u3fA45nsVsENmilnFvyNIl5ekIHrciM9CyKfHOThMrgtkjhBoMz2P853WINC/ZfqL9xq5aONunzd2Zb24lDf362tkD6wElKv2iRrOCJNbv8JtTxlws+tsfHSq5ayrVxUt8dbuivZc3CQBAFvsi0rvGhhW9vWN3fRduf1NCtFl61u+hRfYglQBdDcvChzSuPfcQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MWHPR1001MB2365.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(346002)(39860400002)(366004)(136003)(396003)(376002)(8936002)(36756003)(8676002)(66946007)(66476007)(6666004)(5660300002)(956004)(1076003)(4001150100001)(6496006)(66556008)(52116002)(83380400001)(26005)(38350700002)(4326008)(38100700002)(86362001)(7416002)(478600001)(966005)(186003)(44832011)(2906002)(9686003)(316002)(6486002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?RJUCmQaaiTg80p9Takkzxl9CmveMemqf87Pu6Q4lnt5GFLuMGOQ9QCGUUN0Q?= =?us-ascii?Q?H9Pq9k3GRT8Cvdv2MO+lGN62w5QeS9GXPZZ6W5dRgH/QcsLAzsak4A5BcQKH?= =?us-ascii?Q?6q3wIXgVC8XoDXJwXVIwPZYM1UrCVaO48jsboAbR4wdqWYQVzEigSsCh9i30?= =?us-ascii?Q?f5wvivad8JDrOAX++UQnx634SGdgIJhvhxJxDUj2scnIKeGAIn5hySKBWvlL?= =?us-ascii?Q?kEBPiDSrsK88HFfONDm/D80kB3pXfqDbKZk7DCPN9K+/x/Xl6sSp4Ft9HmMt?= =?us-ascii?Q?ll+R9e5WrQgdyOHKVyi4n/dqiTa5mC6Sbq+6/fZhZKfdDVWNBiIEtLlJNi3f?= =?us-ascii?Q?dIldS933mDKURAMs+egJ3lwAr3EVDl8ci3bInvveCfFEQ+kb12t0DGdB+B7z?= =?us-ascii?Q?BrNBF+IhdlAAoCToEaBqWK3pPxrXBGB1Bc9KlCf2+H4IBvnF6s05xFztYL8I?= =?us-ascii?Q?RHvDBXcWamYIQY4l78zkYGPUWwgnJOpilSxsmYbRHPzyJcxFmcwTUqBq6YOn?= =?us-ascii?Q?1DmPa7zpr3HH+kS6aERWPkIFRTjaSOU8q4gY6bgykF/AHr4b3lmx7CmfQRYF?= =?us-ascii?Q?pzWawkiPVHfK+XArQW/rkdFflNu/K2JeYKTsGFSO60kIlDMWGXbwiPtW1IWG?= =?us-ascii?Q?PQNRG52T8G2tZ0+DxrAxfN0zwmV5sqJWKvDe3fAgdegx03rGlr9kuPjbrW5/?= =?us-ascii?Q?daAy6+tcTWzqAXFzIF2s7g/dBQw2c/n42bn/0M6ZHzUGEj3yDHMzS4QsHNn4?= =?us-ascii?Q?pSKfpE2lFKWoqPVMLRR1PEWICsZ94dnnPFsnMFa95jRpW6pwETpIuYPwLpOf?= =?us-ascii?Q?Qv0uGus2jPlKmbbUtZ5jnORX+W1gPPnpTcCt1oWVjfgWEG5OzAwWElUiJmaX?= =?us-ascii?Q?g3QOTLi2SWpbsqPNIjlSYO/1PIt5rlXLoICfdPSgOIo4c2UNzvSTNoJlm0hP?= =?us-ascii?Q?WDkDGJiByD+PDa9B9XB/tuMjG9CF5+tNp1DcTcf/D9hnEBh6hSqrrAwyOi1N?= =?us-ascii?Q?fAimYDxLKXZ9r24776vTK+xccMSvhW6IuRIzMVDCg8lZdpewYCs8uX/nBF6b?= =?us-ascii?Q?xP1/QbBaOaJDp6FUZIJ6A8ErSTx8Tz4V3SPvEEDM6Q8lPx34R7kZsyJjsYGt?= =?us-ascii?Q?/n27jx26yvlnob5vqHIocwcKbGJUtWAKPwqgOKfbofAAer1bPts0iDCCuSWm?= =?us-ascii?Q?CNqmBY0ia1znVe/wREpbTnDIkxlXBhppo0pQxFdzIyg1j7FiOSVr9mJ21GN9?= =?us-ascii?Q?7AedPjEU7ozpO4Ppcc7q8lOEhVqHqM/mGoI9ciZ2s3GBPQGzgIlNDxam73Nb?= =?us-ascii?Q?TJM+YMDyFiCuIo5B7CGaTY4l?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8ef93c1-7387-45ee-c37e-08d94a8b05a9 X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2365.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2021 07:58:40.9025 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: oHtoc47EiYaAp9/Cyddy05O/T1+n0OmdoqM9LivBud8Dm2WD/iOlU9laPMq2yGt60teEsng/YqNuMePCtHqORf8Y/hvbc+r39aIhxzI7Wfw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR10MB4689 X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=10049 signatures=668682 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 spamscore=0 phishscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2107190043 X-Proofpoint-ORIG-GUID: usEAECevK7JvzfCbffI-5SdjWIbSKgOD X-Proofpoint-GUID: usEAECevK7JvzfCbffI-5SdjWIbSKgOD Cc: kbuild-all@lists.01.org, lkp@intel.com, airlied@linux.ie, linuxarm@huawei.com, jonathanh@nvidia.com, iommu@lists.linux-foundation.org, thierry.reding@gmail.com, daniel@ffwll.ch X-BeenThere: iommu@lists.linux-foundation.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development issues for Linux IOMMU support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: iommu-bounces@lists.linux-foundation.org Sender: "iommu" Hi John, url: https://github.com/0day-ci/linux/commits/John-Garry/iommu-Allow-IOVA-rcache-range-be-configured/20210714-184328 base: https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git next config: ia64-randconfig-m031-20210714 (attached as .config) compiler: ia64-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: drivers/iommu/dma-iommu.c:384 iommu_dma_init_domain() warn: variable dereferenced before check 'dev' (see line 374) vim +/dev +384 drivers/iommu/dma-iommu.c 06d60728ff5c01 Christoph Hellwig 2019-05-20 332 static int iommu_dma_init_domain(struct iommu_domain *domain, dma_addr_t base, ac6d704679d343 Jean-Philippe Brucker 2021-06-18 333 dma_addr_t limit, struct device *dev) 0db2e5d18f76a6 Robin Murphy 2015-10-01 334 { fdbe574eb69312 Robin Murphy 2017-01-19 335 struct iommu_dma_cookie *cookie = domain->iova_cookie; c61a4633a56aaa Shaokun Zhang 2019-01-24 336 unsigned long order, base_pfn; 6b0c54e7f27159 Yunsheng Lin 2019-08-24 337 struct iova_domain *iovad; de4ba360c3e4ed John Garry 2021-07-14 338 size_t max_opt_dma_size; de4ba360c3e4ed John Garry 2021-07-14 339 unsigned long iova_len = 0; 0db2e5d18f76a6 Robin Murphy 2015-10-01 340 fdbe574eb69312 Robin Murphy 2017-01-19 341 if (!cookie || cookie->type != IOMMU_DMA_IOVA_COOKIE) fdbe574eb69312 Robin Murphy 2017-01-19 342 return -EINVAL; 0db2e5d18f76a6 Robin Murphy 2015-10-01 343 6b0c54e7f27159 Yunsheng Lin 2019-08-24 344 iovad = &cookie->iovad; 6b0c54e7f27159 Yunsheng Lin 2019-08-24 345 0db2e5d18f76a6 Robin Murphy 2015-10-01 346 /* Use the smallest supported page size for IOVA granularity */ d16e0faab911cc Robin Murphy 2016-04-07 347 order = __ffs(domain->pgsize_bitmap); 0db2e5d18f76a6 Robin Murphy 2015-10-01 348 base_pfn = max_t(unsigned long, 1, base >> order); 0db2e5d18f76a6 Robin Murphy 2015-10-01 349 0db2e5d18f76a6 Robin Murphy 2015-10-01 350 /* Check the domain allows at least some access to the device... */ 0db2e5d18f76a6 Robin Murphy 2015-10-01 351 if (domain->geometry.force_aperture) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 352 if (base > domain->geometry.aperture_end || ac6d704679d343 Jean-Philippe Brucker 2021-06-18 353 limit < domain->geometry.aperture_start) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 354 pr_warn("specified DMA range outside IOMMU capability\n"); 0db2e5d18f76a6 Robin Murphy 2015-10-01 355 return -EFAULT; 0db2e5d18f76a6 Robin Murphy 2015-10-01 356 } 0db2e5d18f76a6 Robin Murphy 2015-10-01 357 /* ...then finally give it a kicking to make sure it fits */ 0db2e5d18f76a6 Robin Murphy 2015-10-01 358 base_pfn = max_t(unsigned long, base_pfn, 0db2e5d18f76a6 Robin Murphy 2015-10-01 359 domain->geometry.aperture_start >> order); 0db2e5d18f76a6 Robin Murphy 2015-10-01 360 } 0db2e5d18f76a6 Robin Murphy 2015-10-01 361 f51d7bb79c1124 Robin Murphy 2017-01-16 362 /* start_pfn is always nonzero for an already-initialised domain */ 0db2e5d18f76a6 Robin Murphy 2015-10-01 363 if (iovad->start_pfn) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 364 if (1UL << order != iovad->granule || f51d7bb79c1124 Robin Murphy 2017-01-16 365 base_pfn != iovad->start_pfn) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 366 pr_warn("Incompatible range for DMA domain\n"); 0db2e5d18f76a6 Robin Murphy 2015-10-01 367 return -EFAULT; 0db2e5d18f76a6 Robin Murphy 2015-10-01 368 } 7c1b058c8b5a31 Robin Murphy 2017-03-16 369 7c1b058c8b5a31 Robin Murphy 2017-03-16 370 return 0; 0db2e5d18f76a6 Robin Murphy 2015-10-01 371 } 7c1b058c8b5a31 Robin Murphy 2017-03-16 372 de4ba360c3e4ed John Garry 2021-07-14 373 de4ba360c3e4ed John Garry 2021-07-14 @374 max_opt_dma_size = iommu_group_get_max_opt_dma_size(dev->iommu_group); ^^^^^^^^^^^^^^^^ New unchecked dereference de4ba360c3e4ed John Garry 2021-07-14 375 if (max_opt_dma_size) { de4ba360c3e4ed John Garry 2021-07-14 376 unsigned long shift = __ffs(1UL << order); de4ba360c3e4ed John Garry 2021-07-14 377 de4ba360c3e4ed John Garry 2021-07-14 378 iova_len = max_opt_dma_size >> shift; de4ba360c3e4ed John Garry 2021-07-14 379 iova_len = roundup_pow_of_two(iova_len); de4ba360c3e4ed John Garry 2021-07-14 380 } de4ba360c3e4ed John Garry 2021-07-14 381 de4ba360c3e4ed John Garry 2021-07-14 382 init_iova_domain(iovad, 1UL << order, base_pfn, iova_len); 2da274cdf998a1 Zhen Lei 2018-09-20 383 82c3cefb9f1652 Lu Baolu 2021-02-25 @384 if (!cookie->fq_domain && (!dev || !dev_is_untrusted(dev)) && ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ a250c23f15c21c Robin Murphy 2021-04-01 385 domain->ops->flush_iotlb_all && !iommu_get_dma_strict(domain)) { b34e9b0de3c411 Tom Murphy 2020-09-10 386 if (init_iova_flush_queue(iovad, iommu_dma_flush_iotlb_all, 2a2b8eaa5b2566 Tom Murphy 2020-11-24 387 iommu_dma_entry_dtor)) b34e9b0de3c411 Tom Murphy 2020-09-10 388 pr_warn("iova flush queue initialization failed\n"); b34e9b0de3c411 Tom Murphy 2020-09-10 389 else 2da274cdf998a1 Zhen Lei 2018-09-20 390 cookie->fq_domain = domain; 2da274cdf998a1 Zhen Lei 2018-09-20 391 } 2da274cdf998a1 Zhen Lei 2018-09-20 392 7c1b058c8b5a31 Robin Murphy 2017-03-16 393 if (!dev) ^^^^ Old code has checks for NULL 0db2e5d18f76a6 Robin Murphy 2015-10-01 394 return 0; 7c1b058c8b5a31 Robin Murphy 2017-03-16 395 7c1b058c8b5a31 Robin Murphy 2017-03-16 396 return iova_reserve_iommu_regions(dev, domain); 0db2e5d18f76a6 Robin Murphy 2015-10-01 397 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============6945306963684774343==" MIME-Version: 1.0 From: kernel test robot Subject: Re: [PATCH v4 6/6] dma-iommu: Pass iova len for IOVA domain init Date: Thu, 15 Jul 2021 09:36:31 +0800 Message-ID: <202107150933.iNUojyx8-lkp@intel.com> List-Id: To: kbuild@lists.01.org --===============6945306963684774343== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable CC: kbuild-all(a)lists.01.org In-Reply-To: <1626259003-201303-7-git-send-email-john.garry@huawei.com> References: <1626259003-201303-7-git-send-email-john.garry@huawei.com> TO: John Garry TO: joro(a)8bytes.org TO: will(a)kernel.org TO: robin.murphy(a)arm.com TO: baolu.lu(a)linux.intel.com CC: iommu(a)lists.linux-foundation.org CC: linuxarm(a)huawei.com CC: thierry.reding(a)gmail.com CC: airlied(a)linux.ie CC: daniel(a)ffwll.ch CC: jonathanh(a)nvidia.com Hi John, I love your patch! Perhaps something to improve: [auto build test WARNING on iommu/next] [also build test WARNING on linuxtv-media/master tegra/for-next tegra-drm/d= rm/tegra/for-next linus/master v5.14-rc1 next-20210714] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/John-Garry/iommu-Allow-IOV= A-rcache-range-be-configured/20210714-184328 base: https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git next :::::: branch date: 15 hours ago :::::: commit date: 15 hours ago config: ia64-randconfig-m031-20210714 (attached as .config) compiler: ia64-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: drivers/iommu/dma-iommu.c:384 iommu_dma_init_domain() warn: variable derefe= renced before check 'dev' (see line 374) vim +/dev +384 drivers/iommu/dma-iommu.c 82c3cefb9f1652 Lu Baolu 2021-02-25 319 = 0db2e5d18f76a6 Robin Murphy 2015-10-01 320 /** 0db2e5d18f76a6 Robin Murphy 2015-10-01 321 * iommu_dma_init_dom= ain - Initialise a DMA mapping domain 0db2e5d18f76a6 Robin Murphy 2015-10-01 322 * @domain: IOMMU dom= ain previously prepared by iommu_get_dma_cookie() 0db2e5d18f76a6 Robin Murphy 2015-10-01 323 * @base: IOVA at whi= ch the mappable address space starts ac6d704679d343 Jean-Philippe Brucker 2021-06-18 324 * @limit: Last addre= ss of the IOVA space fade1ec055dc6b Robin Murphy 2016-09-12 325 * @dev: Device the d= omain is being initialised for 0db2e5d18f76a6 Robin Murphy 2015-10-01 326 * ac6d704679d343 Jean-Philippe Brucker 2021-06-18 327 * @base and @limit += 1 should be exact multiples of IOMMU page granularity to 0db2e5d18f76a6 Robin Murphy 2015-10-01 328 * avoid rounding sur= prises. If necessary, we reserve the page at address 0 0db2e5d18f76a6 Robin Murphy 2015-10-01 329 * to ensure it is an= invalid IOVA. It is safe to reinitialise a domain, but 0db2e5d18f76a6 Robin Murphy 2015-10-01 330 * any change which c= ould make prior IOVAs invalid will fail. 0db2e5d18f76a6 Robin Murphy 2015-10-01 331 */ 06d60728ff5c01 Christoph Hellwig 2019-05-20 332 static int iommu_dma_= init_domain(struct iommu_domain *domain, dma_addr_t base, ac6d704679d343 Jean-Philippe Brucker 2021-06-18 333 dma_addr_t limit= , struct device *dev) 0db2e5d18f76a6 Robin Murphy 2015-10-01 334 { fdbe574eb69312 Robin Murphy 2017-01-19 335 struct iommu_dma_coo= kie *cookie =3D domain->iova_cookie; c61a4633a56aaa Shaokun Zhang 2019-01-24 336 unsigned long order,= base_pfn; 6b0c54e7f27159 Yunsheng Lin 2019-08-24 337 struct iova_domain *= iovad; de4ba360c3e4ed John Garry 2021-07-14 338 size_t max_opt_dma_s= ize; de4ba360c3e4ed John Garry 2021-07-14 339 unsigned long iova_l= en =3D 0; 0db2e5d18f76a6 Robin Murphy 2015-10-01 340 = fdbe574eb69312 Robin Murphy 2017-01-19 341 if (!cookie || cooki= e->type !=3D IOMMU_DMA_IOVA_COOKIE) fdbe574eb69312 Robin Murphy 2017-01-19 342 return -EINVAL; 0db2e5d18f76a6 Robin Murphy 2015-10-01 343 = 6b0c54e7f27159 Yunsheng Lin 2019-08-24 344 iovad =3D &cookie->i= ovad; 6b0c54e7f27159 Yunsheng Lin 2019-08-24 345 = 0db2e5d18f76a6 Robin Murphy 2015-10-01 346 /* Use the smallest = supported page size for IOVA granularity */ d16e0faab911cc Robin Murphy 2016-04-07 347 order =3D __ffs(doma= in->pgsize_bitmap); 0db2e5d18f76a6 Robin Murphy 2015-10-01 348 base_pfn =3D max_t(u= nsigned long, 1, base >> order); 0db2e5d18f76a6 Robin Murphy 2015-10-01 349 = 0db2e5d18f76a6 Robin Murphy 2015-10-01 350 /* Check the domain = allows at least some access to the device... */ 0db2e5d18f76a6 Robin Murphy 2015-10-01 351 if (domain->geometry= .force_aperture) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 352 if (base > domain->= geometry.aperture_end || ac6d704679d343 Jean-Philippe Brucker 2021-06-18 353 limit < domain-= >geometry.aperture_start) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 354 pr_warn("specified= DMA range outside IOMMU capability\n"); 0db2e5d18f76a6 Robin Murphy 2015-10-01 355 return -EFAULT; 0db2e5d18f76a6 Robin Murphy 2015-10-01 356 } 0db2e5d18f76a6 Robin Murphy 2015-10-01 357 /* ...then finally = give it a kicking to make sure it fits */ 0db2e5d18f76a6 Robin Murphy 2015-10-01 358 base_pfn =3D max_t(= unsigned long, base_pfn, 0db2e5d18f76a6 Robin Murphy 2015-10-01 359 domain->geometry.= aperture_start >> order); 0db2e5d18f76a6 Robin Murphy 2015-10-01 360 } 0db2e5d18f76a6 Robin Murphy 2015-10-01 361 = f51d7bb79c1124 Robin Murphy 2017-01-16 362 /* start_pfn is alwa= ys nonzero for an already-initialised domain */ 0db2e5d18f76a6 Robin Murphy 2015-10-01 363 if (iovad->start_pfn= ) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 364 if (1UL << order != =3D iovad->granule || f51d7bb79c1124 Robin Murphy 2017-01-16 365 base_pfn !=3D i= ovad->start_pfn) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 366 pr_warn("Incompati= ble range for DMA domain\n"); 0db2e5d18f76a6 Robin Murphy 2015-10-01 367 return -EFAULT; 0db2e5d18f76a6 Robin Murphy 2015-10-01 368 } 7c1b058c8b5a31 Robin Murphy 2017-03-16 369 = 7c1b058c8b5a31 Robin Murphy 2017-03-16 370 return 0; 0db2e5d18f76a6 Robin Murphy 2015-10-01 371 } 7c1b058c8b5a31 Robin Murphy 2017-03-16 372 = de4ba360c3e4ed John Garry 2021-07-14 373 = de4ba360c3e4ed John Garry 2021-07-14 @374 max_opt_dma_size =3D= iommu_group_get_max_opt_dma_size(dev->iommu_group); de4ba360c3e4ed John Garry 2021-07-14 375 if (max_opt_dma_size= ) { de4ba360c3e4ed John Garry 2021-07-14 376 unsigned long shift= =3D __ffs(1UL << order); de4ba360c3e4ed John Garry 2021-07-14 377 = de4ba360c3e4ed John Garry 2021-07-14 378 iova_len =3D max_op= t_dma_size >> shift; de4ba360c3e4ed John Garry 2021-07-14 379 iova_len =3D roundu= p_pow_of_two(iova_len); de4ba360c3e4ed John Garry 2021-07-14 380 } de4ba360c3e4ed John Garry 2021-07-14 381 = de4ba360c3e4ed John Garry 2021-07-14 382 init_iova_domain(iov= ad, 1UL << order, base_pfn, iova_len); 2da274cdf998a1 Zhen Lei 2018-09-20 383 = 82c3cefb9f1652 Lu Baolu 2021-02-25 @384 if (!cookie->fq_doma= in && (!dev || !dev_is_untrusted(dev)) && a250c23f15c21c Robin Murphy 2021-04-01 385 domain->ops->flu= sh_iotlb_all && !iommu_get_dma_strict(domain)) { b34e9b0de3c411 Tom Murphy 2020-09-10 386 if (init_iova_flush= _queue(iovad, iommu_dma_flush_iotlb_all, 2a2b8eaa5b2566 Tom Murphy 2020-11-24 387 iommu_dma_entr= y_dtor)) b34e9b0de3c411 Tom Murphy 2020-09-10 388 pr_warn("iova flus= h queue initialization failed\n"); b34e9b0de3c411 Tom Murphy 2020-09-10 389 else 2da274cdf998a1 Zhen Lei 2018-09-20 390 cookie->fq_domain = =3D domain; 2da274cdf998a1 Zhen Lei 2018-09-20 391 } 2da274cdf998a1 Zhen Lei 2018-09-20 392 = 7c1b058c8b5a31 Robin Murphy 2017-03-16 393 if (!dev) 0db2e5d18f76a6 Robin Murphy 2015-10-01 394 return 0; 7c1b058c8b5a31 Robin Murphy 2017-03-16 395 = 7c1b058c8b5a31 Robin Murphy 2017-03-16 396 return iova_reserve_= iommu_regions(dev, domain); 0db2e5d18f76a6 Robin Murphy 2015-10-01 397 } 0db2e5d18f76a6 Robin Murphy 2015-10-01 398 = --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org --===============6945306963684774343== Content-Type: application/gzip MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="config.gz" 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 --===============6945306963684774343==-- From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============9010153452366416126==" MIME-Version: 1.0 From: Dan Carpenter To: kbuild-all@lists.01.org Subject: Re: [PATCH v4 6/6] dma-iommu: Pass iova len for IOVA domain init Date: Mon, 19 Jul 2021 10:58:09 +0300 Message-ID: <202107150933.iNUojyx8-lkp@intel.com> In-Reply-To: <1626259003-201303-7-git-send-email-john.garry@huawei.com> List-Id: --===============9010153452366416126== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi John, url: https://github.com/0day-ci/linux/commits/John-Garry/iommu-Allow-IOV= A-rcache-range-be-configured/20210714-184328 base: https://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu.git next config: ia64-randconfig-m031-20210714 (attached as .config) compiler: ia64-linux-gcc (GCC) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter smatch warnings: drivers/iommu/dma-iommu.c:384 iommu_dma_init_domain() warn: variable derefe= renced before check 'dev' (see line 374) vim +/dev +384 drivers/iommu/dma-iommu.c 06d60728ff5c01 Christoph Hellwig 2019-05-20 332 static int iommu_dma_= init_domain(struct iommu_domain *domain, dma_addr_t base, ac6d704679d343 Jean-Philippe Brucker 2021-06-18 333 dma_addr_t limit= , struct device *dev) 0db2e5d18f76a6 Robin Murphy 2015-10-01 334 { fdbe574eb69312 Robin Murphy 2017-01-19 335 struct iommu_dma_coo= kie *cookie =3D domain->iova_cookie; c61a4633a56aaa Shaokun Zhang 2019-01-24 336 unsigned long order,= base_pfn; 6b0c54e7f27159 Yunsheng Lin 2019-08-24 337 struct iova_domain *= iovad; de4ba360c3e4ed John Garry 2021-07-14 338 size_t max_opt_dma_s= ize; de4ba360c3e4ed John Garry 2021-07-14 339 unsigned long iova_l= en =3D 0; 0db2e5d18f76a6 Robin Murphy 2015-10-01 340 = fdbe574eb69312 Robin Murphy 2017-01-19 341 if (!cookie || cooki= e->type !=3D IOMMU_DMA_IOVA_COOKIE) fdbe574eb69312 Robin Murphy 2017-01-19 342 return -EINVAL; 0db2e5d18f76a6 Robin Murphy 2015-10-01 343 = 6b0c54e7f27159 Yunsheng Lin 2019-08-24 344 iovad =3D &cookie->i= ovad; 6b0c54e7f27159 Yunsheng Lin 2019-08-24 345 = 0db2e5d18f76a6 Robin Murphy 2015-10-01 346 /* Use the smallest = supported page size for IOVA granularity */ d16e0faab911cc Robin Murphy 2016-04-07 347 order =3D __ffs(doma= in->pgsize_bitmap); 0db2e5d18f76a6 Robin Murphy 2015-10-01 348 base_pfn =3D max_t(u= nsigned long, 1, base >> order); 0db2e5d18f76a6 Robin Murphy 2015-10-01 349 = 0db2e5d18f76a6 Robin Murphy 2015-10-01 350 /* Check the domain = allows at least some access to the device... */ 0db2e5d18f76a6 Robin Murphy 2015-10-01 351 if (domain->geometry= .force_aperture) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 352 if (base > domain->= geometry.aperture_end || ac6d704679d343 Jean-Philippe Brucker 2021-06-18 353 limit < domain-= >geometry.aperture_start) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 354 pr_warn("specified= DMA range outside IOMMU capability\n"); 0db2e5d18f76a6 Robin Murphy 2015-10-01 355 return -EFAULT; 0db2e5d18f76a6 Robin Murphy 2015-10-01 356 } 0db2e5d18f76a6 Robin Murphy 2015-10-01 357 /* ...then finally = give it a kicking to make sure it fits */ 0db2e5d18f76a6 Robin Murphy 2015-10-01 358 base_pfn =3D max_t(= unsigned long, base_pfn, 0db2e5d18f76a6 Robin Murphy 2015-10-01 359 domain->geometry.= aperture_start >> order); 0db2e5d18f76a6 Robin Murphy 2015-10-01 360 } 0db2e5d18f76a6 Robin Murphy 2015-10-01 361 = f51d7bb79c1124 Robin Murphy 2017-01-16 362 /* start_pfn is alwa= ys nonzero for an already-initialised domain */ 0db2e5d18f76a6 Robin Murphy 2015-10-01 363 if (iovad->start_pfn= ) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 364 if (1UL << order != =3D iovad->granule || f51d7bb79c1124 Robin Murphy 2017-01-16 365 base_pfn !=3D i= ovad->start_pfn) { 0db2e5d18f76a6 Robin Murphy 2015-10-01 366 pr_warn("Incompati= ble range for DMA domain\n"); 0db2e5d18f76a6 Robin Murphy 2015-10-01 367 return -EFAULT; 0db2e5d18f76a6 Robin Murphy 2015-10-01 368 } 7c1b058c8b5a31 Robin Murphy 2017-03-16 369 = 7c1b058c8b5a31 Robin Murphy 2017-03-16 370 return 0; 0db2e5d18f76a6 Robin Murphy 2015-10-01 371 } 7c1b058c8b5a31 Robin Murphy 2017-03-16 372 = de4ba360c3e4ed John Garry 2021-07-14 373 = de4ba360c3e4ed John Garry 2021-07-14 @374 max_opt_dma_size =3D= iommu_group_get_max_opt_dma_size(dev->iommu_group); = ^^^^^^^^^^^^^^^^ New unchecked dereference de4ba360c3e4ed John Garry 2021-07-14 375 if (max_opt_dma_size= ) { de4ba360c3e4ed John Garry 2021-07-14 376 unsigned long shift= =3D __ffs(1UL << order); de4ba360c3e4ed John Garry 2021-07-14 377 = de4ba360c3e4ed John Garry 2021-07-14 378 iova_len =3D max_op= t_dma_size >> shift; de4ba360c3e4ed John Garry 2021-07-14 379 iova_len =3D roundu= p_pow_of_two(iova_len); de4ba360c3e4ed John Garry 2021-07-14 380 } de4ba360c3e4ed John Garry 2021-07-14 381 = de4ba360c3e4ed John Garry 2021-07-14 382 init_iova_domain(iov= ad, 1UL << order, base_pfn, iova_len); 2da274cdf998a1 Zhen Lei 2018-09-20 383 = 82c3cefb9f1652 Lu Baolu 2021-02-25 @384 if (!cookie->fq_doma= in && (!dev || !dev_is_untrusted(dev)) && = ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ a250c23f15c21c Robin Murphy 2021-04-01 385 domain->ops->flu= sh_iotlb_all && !iommu_get_dma_strict(domain)) { b34e9b0de3c411 Tom Murphy 2020-09-10 386 if (init_iova_flush= _queue(iovad, iommu_dma_flush_iotlb_all, 2a2b8eaa5b2566 Tom Murphy 2020-11-24 387 iommu_dma_entr= y_dtor)) b34e9b0de3c411 Tom Murphy 2020-09-10 388 pr_warn("iova flus= h queue initialization failed\n"); b34e9b0de3c411 Tom Murphy 2020-09-10 389 else 2da274cdf998a1 Zhen Lei 2018-09-20 390 cookie->fq_domain = =3D domain; 2da274cdf998a1 Zhen Lei 2018-09-20 391 } 2da274cdf998a1 Zhen Lei 2018-09-20 392 = 7c1b058c8b5a31 Robin Murphy 2017-03-16 393 if (!dev) ^^^^ Old code has checks for NULL 0db2e5d18f76a6 Robin Murphy 2015-10-01 394 return 0; 7c1b058c8b5a31 Robin Murphy 2017-03-16 395 = 7c1b058c8b5a31 Robin Murphy 2017-03-16 396 return iova_reserve_= iommu_regions(dev, domain); 0db2e5d18f76a6 Robin Murphy 2015-10-01 397 } --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org --===============9010153452366416126==--