From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966610AbcAZPhg (ORCPT ); Tue, 26 Jan 2016 10:37:36 -0500 Received: from mail-by2on0077.outbound.protection.outlook.com ([207.46.100.77]:5600 "EHLO na01-by2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S966341AbcAZPh3 (ORCPT ); Tue, 26 Jan 2016 10:37:29 -0500 Authentication-Results: spf=none (sender IP is 165.204.84.222) smtp.mailfrom=amd.com; 8bytes.org; dkim=none (message not signed) header.d=none;8bytes.org; dmarc=permerror action=none header.from=amd.com; X-WSS-ID: 0O1KGQ8-08-8OO-02 X-M-MSG: From: Wan Zongshun To: Joerg Roedel , CC: Suravee Suthikulpanit , Borislav Petkov , Ray Huang , , , , , "Wan Zongshun" Subject: [PATCH V2 5/8] iommu/amd: Make call-sites of get_device_id aware of its return value Date: Tue, 26 Jan 2016 18:14:34 -0500 Message-ID: <1453850077-2539-6-git-send-email-vincent.wan@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1453850077-2539-1-git-send-email-vincent.wan@amd.com> References: <1453850077-2539-1-git-send-email-vincent.wan@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:165.204.84.222;CTRY:US;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(189002)(199003)(106466001)(2950100001)(1220700001)(1096002)(77096005)(229853001)(11100500001)(586003)(50986999)(5008740100001)(101416001)(76176999)(105586002)(5003600100002)(48376002)(19580395003)(47776003)(36756003)(5003940100001)(189998001)(97736004)(87936001)(2906002)(50466002)(53416004)(19580405001)(5001770100001)(4326007)(50226001)(33646002)(86362001)(92566002);DIR:OUT;SFP:1101;SCL:1;SRVR:BY2PR12MB0711;H:atltwp02.amd.com;FPR:;SPF:None;PTR:InfoDomainNonexistent;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0711;2:zwBiSFe9VeV5tPj4vileuz1Cfi0ab4TabuwL/uiImgUIVxfxjPW2kD+LMU+clNcpOIvqTaYtQ4972AbCI4S7hARi0dakFUjtaVSwomuyP+gdx5RQFQ0Y9S0BZKEDB1kbMD28U+VaEjLWhx5LStx+aQ==;3:H+60h0Q8qnJnRCI14ZmAJ+9vtOPMUuh+PUcJWKqHEyU/Tjleinal0K7+SylYONphrIQVbhXREycdKC4OstUls34NebKES0b3iMerkcgUv5aIWw14g5uXF2cnAE6tkqpEM4raJm1Wg0uA2zf1oB4DmDsqsPZ9N5ckmcol9g6AQnzGXUbHB7BIou1U3vBhOU0F6duo8vOoRlfrP2GBg5JzJTFB1/nr09Kf73bwgSA7i90=;25:YfvCHMiNNrEAH3Eg61gwX5WpypnnFR16CUYw8LiGX9jUKmywQxp+bY3GOnkKjszrqwRQHRfb1q933DIOdwF9PtE4J0ycp0E7SJHQDGfoGijIiTs6uYcWEphlEi6LnBKhDFgIZ1MkuxRZsrRZT+4GHa9e3R9Sjq/ZUCk5+4IQXJu6hw/4I4vKgjpmcj8Zx0JWIGi209K3vTq+2fTBdPQynxIrFOB3ojS0CRVY7PKLZtyppdo9nRkCBptoBWvNzHA9 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0711; X-MS-Office365-Filtering-Correlation-Id: 6e2ca89f-f50a-4901-b041-08d326669724 X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0711;20:baVQbwfxX1F9p3wRg3o/RcljBvMvrdR3FpZydQZAY0Axnd1kXxa9lQONLCUVtUh5LGaTIneoWziX0xSsjGR6G3FRXxxuRBo9vZ495G2Fc3/HYsn7yc+b5kg7WG4aVKDvs87YSFR9U1hmMsSjqaxrxepKFjq6oMwgP0lUBtr//WERX0bRwbzCNr+wQIfpC+cJ6aMlHfnS3PMSt5rtFH0iyQ3r++deguTrTyQQU25TbuFF+B83tHJ9U9rXBQPQn6hJDMalSTsoYv4MPZx6Z8NzK9R1leQs4sNSMx0J1iz0kEt9SsygAs6EE0KKK+uOU1iSLAOwBcbKDIwJW65CzhacLxy12wXp9S7o1YPswmV5ZIaISOzvp6V9unBVbFepzBBP8EkeKA6RzZomh+Dfbyr8zLMCq63xeGGyAArinsPmP0XB1ai+8JOMt4P1VnJxwQz4YCjhFj5OpGBBPReZubofc3ITKQAtDSKEYFFeY85brvMdEq3hYLPjTyw3bk2bZGWA X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(123027)(601004)(2401047)(13024025)(13023025)(520078)(5005006)(13018025)(8121501046)(13017025)(13015025)(3002001)(10201501046);SRVR:BY2PR12MB0711;BCL:0;PCL:0;RULEID:;SRVR:BY2PR12MB0711; X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0711;4:cugXbMjc0Yg3fX4GWNY3OL6zMmlizw7QX2rcBJlHVjRs9k5P8UfSKpOjCijHT7fsNxtBG9rZSLVCstmOJdN4qF4vgKY/QESbARKVbIJMrW1keFT3fwyCYO9J3XG1thADyxDkBlqhBQCT47pfyq+KbWci2ifUlB5SukqBJ5cUBfwg3Wiu7wIRQdlg0U05QcpcyS5q+PIaVbf1c+GpA8wxPasfNTkO86UNPpXGoJlwbeFa8y/GGWA8igtlZwnoclCozp3+IiTkKfPrVTBmFxm8lxEl0X9Lk6Z+Wc/UUqpVQZgYuPtErbwNuH2WJsbQCULjjKsDgC6diLWAM96NBP/R/ow4q2AwdovuJIvQqHT1uZDZo36XaNo1OFlWK8dChBBdtYVHMpjeK2fhehMAx0IhlDPCjd7LbXQ4D9ncg2W6czlz/biBb3uWpr7UnuxyoLe3Q/daYd68PcIyERhNCtLpBqEG3nJRcSObReeR2Ioa7WlgWuw6I1ZF2i6zLbnMEe+usgwy/x9HeLmxFnnhpQYcCg== X-Forefront-PRVS: 08331F819E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BY2PR12MB0711;23:siMbIUqdZ8gjfergdOPkWAPMjw/M90vD1mA7tFw+l?= =?us-ascii?Q?kO/ABTqkmbvHzQV/2RspOqVfYOTlXyPZuHwAaFFehRoWtJtDmaDU6jkYSYCo?= =?us-ascii?Q?m2Fkj87bDC4/ErsPgRJmqZ7dOTmhdCCEDr34NvFaNpCw41mN3C5EO7bx/jiP?= =?us-ascii?Q?DpWvvbEZUmvN8S8MU7ntcFUXGM9mcYo5/nT6ZR7/Zjl3WB3LyBydbOgd9dEx?= =?us-ascii?Q?2GE8ye/BZeWBu2oiC3aSwmYCEwTYxTrJ0BRZubjjlJugSKxzJ9JFo1m+q0Vg?= =?us-ascii?Q?mhmtLDW4hlWgmzps3UOAgwBm+09rvkBD+0CebCfuGwaFGTkiHWMRrVS5CJyD?= =?us-ascii?Q?DNDz3EdQydv6yEtFG1Kq3FF3S7Cu5LnPSw4LJJB0HI5gS1q4G8sju5rUzgE2?= =?us-ascii?Q?SfpGZlLzvod08nWf4JGBscbs0nWacWi5Nh2v/peWsZ90NY0hlcfTmuUHzJR2?= =?us-ascii?Q?/oBVgGeSXQZS8Kwrd0WVRYQYdRdMuDmQ8g83kGpgFjrYmqP19YEYm36I6kE0?= =?us-ascii?Q?+ZFa0UyhlUCMUErvy3X5rXp+LixlBgDSo6CCOw1OlRIwbGHJDyJip4g8BPrE?= =?us-ascii?Q?mNpmlHZ2DeulK4TqKfWLX8w/QP8GEd86VhMfjK1Kc6ecB6dQHCIjuRvTEkvH?= =?us-ascii?Q?SCeH2XpdC+XxY6SzVnwNhzB9SwlDf9sQ1qBxn3UmDKB7BCIsJd3anMyD72og?= =?us-ascii?Q?cTNrV7PcIsgYiONcYQaTi0Fl87sDwBo2m+LJRvySBYssbXXv0IZIrOkJQqy8?= =?us-ascii?Q?gwPJBjiYyqb82WZEByfvlGE6T/Xh4GBOoaiXFY43PrvluGat8yevA/nyN7qV?= =?us-ascii?Q?2RJZR77S9aS0IfQpKd0wfBPr0nFHFDWBOJvB3IzWl7fdaV9zTJPYF375UNGi?= =?us-ascii?Q?RggnARBJtmaPhnCcYayW8cE9QjMmB1RdNGajkGGQCM2P1DrL9iV2bivC2pdd?= =?us-ascii?Q?bhqqFlRL17UtOaDQpIdqw1YlDygt/MvLwuVD9lO9BREfaLD08kGhdcS75rOF?= =?us-ascii?Q?kdX8cGuHPOFtbhpXBkjWoee?= X-Microsoft-Exchange-Diagnostics: 1;BY2PR12MB0711;5:Mod2s3aXFm6er9O/4xyOOCDkUa741OUnX5Enqepaa2kmWc3FmPOCG3vo65OcG0H1qc1nzRuYR9u0LqgIhDif3SoL2FiztGMTl2R/X0BKHBqMm+pv2VsQNy63Cm7X+k0ZFRjrDbVfWVzQksoAEJQVWA==;24:rI7wQbbol0Mh5v/r6idqS+sYRsbBfg6zcpJiE+/tg+s7PittgyJdOXcLn7IFPIUVzaH+lX1Ct3/f/fd//Q9lkIqXN4HsEtHb6eIeoXGow3g=;20:xnAIYOjs+9MbuzeIp5YzrE0GL0/lhX/g83xZb+ioapmQ69KV1hE5IqWMefGY6uWHDrfNOkn7S9InbD/2+dv52itPjKUIqQgqXIR8/d3BPfzEQz6L81CmJS9INLt4OhANX9HXzs9vL31pm2evjH/hhylYpkZpqNKUPWzyZMxqcj0TUgaBDiRGOb4bxDE/VGkcRDEqYOmk8DhNmlRhniYJ1WEMwwOWZDWsVjwfC/vhV5xZ9PFmwoKfqLOgIqsMVciD SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Jan 2016 15:37:24.8186 (UTC) X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=3dd8961f-e488-4e60-8e11-a82d994e183d;Ip=[165.204.84.222];Helo=[atltwp02.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR12MB0711 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wan Zongshun This patch is to make the call-sites of get_device_id aware of its return value. Signed-off-by: Wan Zongshun --- drivers/iommu/amd_iommu.c | 51 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 41 insertions(+), 10 deletions(-) diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index 8063ab2..10d6623 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -278,9 +278,11 @@ static void init_unity_mappings_for_device(struct device *dev, struct dma_ops_domain *dma_dom) { struct unity_map_entry *e; - u16 devid; + int devid; devid = get_device_id(dev); + if (IS_ERR_VALUE(devid)) + return; list_for_each_entry(e, &amd_iommu_unity_map, list) { if (!(devid >= e->devid_start && devid <= e->devid_end)) @@ -295,7 +297,7 @@ static void init_unity_mappings_for_device(struct device *dev, */ static bool check_device(struct device *dev) { - u16 devid; + int devid; if (!dev || !dev->dma_mask) return false; @@ -305,6 +307,8 @@ static bool check_device(struct device *dev) return false; devid = get_device_id(dev); + if (IS_ERR_VALUE(devid)) + return false; /* Out of our scope? */ if (devid > amd_iommu_last_bdf) @@ -341,11 +345,16 @@ static int iommu_init_device(struct device *dev) { struct pci_dev *pdev = to_pci_dev(dev); struct iommu_dev_data *dev_data; + int devid; if (dev->archdata.iommu) return 0; - dev_data = find_dev_data(get_device_id(dev)); + devid = get_device_id(dev); + if (IS_ERR_VALUE(devid)) + return devid; + + dev_data = find_dev_data(devid); if (!dev_data) return -ENOMEM; @@ -366,9 +375,13 @@ static int iommu_init_device(struct device *dev) static void iommu_ignore_device(struct device *dev) { - u16 devid, alias; + u16 alias; + int devid; devid = get_device_id(dev); + if (IS_ERR_VALUE(devid)) + return; + alias = amd_iommu_alias_table[devid]; memset(&amd_iommu_dev_table[devid], 0, sizeof(struct dev_table_entry)); @@ -380,8 +393,14 @@ static void iommu_ignore_device(struct device *dev) static void iommu_uninit_device(struct device *dev) { - struct iommu_dev_data *dev_data = search_dev_data(get_device_id(dev)); + int devid; + struct iommu_dev_data *dev_data; + + devid = get_device_id(dev); + if (IS_ERR_VALUE(devid)) + return; + dev_data = search_dev_data(devid); if (!dev_data) return; @@ -2310,13 +2329,15 @@ static int amd_iommu_add_device(struct device *dev) struct iommu_dev_data *dev_data; struct iommu_domain *domain; struct amd_iommu *iommu; - u16 devid; - int ret; + int ret, devid; if (!check_device(dev) || get_dev_data(dev)) return 0; devid = get_device_id(dev); + if (IS_ERR_VALUE(devid)) + return devid; + iommu = amd_iommu_rlookup_table[devid]; ret = iommu_init_device(dev); @@ -2354,12 +2375,15 @@ out: static void amd_iommu_remove_device(struct device *dev) { struct amd_iommu *iommu; - u16 devid; + int devid; if (!check_device(dev)) return; devid = get_device_id(dev); + if (IS_ERR_VALUE(devid)) + return; + iommu = amd_iommu_rlookup_table[devid]; iommu_uninit_device(dev); @@ -3031,12 +3055,14 @@ static void amd_iommu_detach_device(struct iommu_domain *dom, { struct iommu_dev_data *dev_data = dev->archdata.iommu; struct amd_iommu *iommu; - u16 devid; + int devid; if (!check_device(dev)) return; devid = get_device_id(dev); + if (IS_ERR_VALUE(devid)) + return; if (dev_data->domain != NULL) detach_device(dev); @@ -3154,9 +3180,11 @@ static void amd_iommu_get_dm_regions(struct device *dev, struct list_head *head) { struct unity_map_entry *entry; - u16 devid; + int devid; devid = get_device_id(dev); + if (IS_ERR_VALUE(devid)) + return; list_for_each_entry(entry, &amd_iommu_unity_map, list) { struct iommu_dm_region *region; @@ -3858,6 +3886,9 @@ static struct irq_domain *get_irq_domain(struct irq_alloc_info *info) case X86_IRQ_ALLOC_TYPE_MSI: case X86_IRQ_ALLOC_TYPE_MSIX: devid = get_device_id(&info->msi_dev->dev); + if (IS_ERR_VALUE(devid)) + return NULL; + iommu = amd_iommu_rlookup_table[devid]; if (iommu) return iommu->msi_domain; -- 1.9.1