From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932260AbcDAF3H (ORCPT ); Fri, 1 Apr 2016 01:29:07 -0400 Received: from mail-bn1on0069.outbound.protection.outlook.com ([157.56.110.69]:13874 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932140AbcDAF3B (ORCPT ); Fri, 1 Apr 2016 01:29:01 -0400 Authentication-Results: spf=none (sender IP is 165.204.84.221) 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: 0O4XWK6-07-GXX-02 X-M-MSG: From: Wan Zongshun To: Joerg Roedel , CC: Suravee Suthikulpanit , Borislav Petkov , Ray Huang , , , , Wan Zongshun Subject: [PATCH V3 6/9] iommu/amd: Make call-sites of get_device_id aware of its return value Date: Fri, 1 Apr 2016 09:06:02 -0400 Message-ID: <1459515965-2865-7-git-send-email-vincent.wan@amd.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1459515965-2865-1-git-send-email-vincent.wan@amd.com> References: <1459515965-2865-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.221;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(199003)(189002)(189998001)(5001770100001)(48376002)(101416001)(106466001)(50986999)(33646002)(19580395003)(229853001)(77096005)(105586002)(47776003)(2950100001)(87936001)(19580405001)(76176999)(86362001)(50466002)(5003600100002)(2906002)(50226001)(11100500001)(5003940100001)(5008740100001)(1220700001)(1096002)(81166005)(36756003)(53416004)(586003)(4326007)(92566002);DIR:OUT;SFP:1101;SCL:1;SRVR:CY1PR12MB0854;H:atltwp01.amd.com;FPR:;SPF:None;MLV:sfv;A:1;MX:1;LANG:en; X-MS-Office365-Filtering-Correlation-Id: ab25836e-445c-495a-e134-08d359ee8557 X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0854;2:PwtYfekpWyeah4azkWASL0ME3Ke4+bwguhGeGKFIw8TaVL5BJvGdDpmJHbAtNYPLIG2MdpVYHBggQZ3TLU8Ca5ZkAVJIIgnVfyFsvVEDqThHx0cDb84xWBix879j7sYNP0KJPlT662YU5U8vO0/+ddcgYxv7GA4n4AnFKhqU1qLeXaG5HGu4rbXpo/2wsomg;3:G6gLi1gAJTYut3XQvH5ZkbKb4Psuni7Id6z0rBfsLkjMEduXXV74HKo25emXuGg7u1JVNEIEyzBRlaX51nFqAFUfCLm/LpAbMSJcf5eA5BJe2DRaRIGC7s5LvoSeRN50TdwXWYBNLH09yuw4McAswnQ6dsLbJ031p5RqVL2Qll79gwYbM9pklJhTK1GDnEbII8Q9rea09RfBagN+jkj6nweYhbvCcRN/xgW45u2sbNc=;25:qlgAUJuCiLuKC/wRIhMSlcc9BgofKHc0l6LCyDYq3owlpCYDsWT4kievCJ6T+rYMy08x8aUzYLs0c+dYUnfXUZVycFmmrJLXbb4dqqWlAkAb8JokcV1n9wFA4wXkdcdcyCZ9ZVrfD93dsw183AM75wban3P51hTU29qgGN7ZiEDZ/DQ0tJNAgxhJzakZ9t9vfwRFtHZl+ahA7tCXPFE4vm8t19JWH5KjbwEGYoNiEEbK3PYBcza32RV43DzjK9L5UJLm71H2mOftYJz6+tF5OL53Z/EcA2Mpz5be3c1XYLi0VEsu4AdmmGXsekuaXoy0a2bYenEkPLjp/3FMvxIywDU5RqMaQc2NT/kiM/hqYMc= X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0854; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0854;20:crQNhtLQvRsSMQxSgdrkpyQY3hTPzAfLW31YwwsgZFCnCjUnOifIKmxxLEtQ0GNljPpZuOdHmSBXGmbjV96DF24LGA0krGgQLeOwn0dmceqX+eyFtKtIxcoIw9YqGisbLO+A+MNryhXijtUYZv05C2K8bOGRBayFYMoO4kqfX/pnARQm43a6dUwXAbkWrJNr5gSU9mvBVt9WwAnyw/9TC/MMID9uYl7+wF8wM/oA8dNjKck6aaTUm//aX0hkJig6MGVSCpM1NwkwExJqyknrNBnMrSX4y9RHlHMrT+srS2QKWK6lFaZ//+KaxUr7oXWsg3vcKFt7OgLDEylUOrPRa51nIYtlEsaF67/p2NapyzeiUY1v/0ON+8QmJxvm9mJWGk54tWDZVATnORKg1dcBxO9z/4i0MNZ/YvhNAbjFikK4LO7FPu4Sz4Rxs+2WfMCnxDGPcCdD8B0kHSIQy8vp9abLJv5Wxu++1rB0sfogf+KREUWKDK2BxvRoZE5a2O+m X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(13015025)(13018025)(13024025)(5005006)(8121501046)(13017025)(13023025)(10201501046)(3002001);SRVR:CY1PR12MB0854;BCL:0;PCL:0;RULEID:;SRVR:CY1PR12MB0854; X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0854;4:fA8dupqVkFQTtjtAEkl98g/frZOJJYSr/2SIAGIDsYOfD+MgRHOdM/lIBTXiCl0gaVslFPOHbGVga4KauQJ8x2Paykx8T4IWcO/yLl7tUE2XSZvCcImS5Sgd+LnrGAyonbOR/u9dMFwvpx16Fh+iDXt8VfGiQ8x3XooJk3jXG0KuwOig4PVGaJChmzqdgpkqL8wHhLz7vA6/DSGjr5k+tSA/4/IEYj2aUZo0x/4GtSXfARsV9wdw08x0FzBJa+1q0HqvTU9EiTnbgf5K8yOaU7qYs9jjFXrCj2P4iKol6CtA0NlU610FvIZHGocu5Vcl6hMB1YmAS037MXhdY5UlyH3v8x+tvlKThEwUtBJFsnIiZJPxwsAHBx3RcniXsBBUFjmiD2PQ9h0kKsGhJmx9yI0DSXZEgB42MQCZb5Y/Rpwb2BoSMzugDJinePEWfeuFP8Vd/jf0mVeK9RXZYSpdLw== X-Forefront-PRVS: 0899B47777 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CY1PR12MB0854;23:ZnnBAS8fqTfOhFJ4bOjusbzlyNsrc7knNTnIwnH8W?= =?us-ascii?Q?Ii6K0iw0vWqeQAyUJGnUuHLVK7LMdGWqRrbyF2vKuxwxFe3jYqJ5PRF9NUws?= =?us-ascii?Q?M2MfUzvfrWW6JEcNlo5GMs5F64c+zTcJPwyJE9VU+xtF4D5gzmqU+OP+9Oa5?= =?us-ascii?Q?u2eUTM5m3wWTkJUudrzSso1b/zPm7Y5m1s++NIcMqdqoEeHfVo4lL5TnyG1s?= =?us-ascii?Q?R27SsUutPxLgJCFYiKfmDQWXIhLgQWv4DJHgloAdV6UtFSbYev2+56shNofH?= =?us-ascii?Q?mpXt49mLfQwHatNq5my8efClrMlEcxW+XOXzYyzY7aQ15Pr/NawnZkJONDPT?= =?us-ascii?Q?T9sGCA1CiDV8T9Umv8X4dN/PDJfR4F4XIo1p7gSL56O39hRP7ten1gWZpYcI?= =?us-ascii?Q?KrDMOJADoJsjgqH2RMDZRo/LmFNGXgTNJmbNmFzZKYDG8AIt43UO/pLzEtE2?= =?us-ascii?Q?SZpq8D/eWFUDOWSXjOJqXB0uJH/xNEcaurTDmmt198Qbyfe/BhZNvRuSO6MR?= =?us-ascii?Q?aGi3Uw6DP4by1X1N+OKOYQedKJwWXLhwdT+fA5SQr9f+yl1FQ6ZqkNJck9rB?= =?us-ascii?Q?jn3rTZBIt2fAFiNUuzsqonyYXNsPPPaFEKYXQk0x2vcw/J6xC/3yd3R5M0yX?= =?us-ascii?Q?xG323o/ZDgMlSNxsTjWMzG33rVDYIG3DtFWS9x3uvkQUgqP2xyD1v6XFqmCE?= =?us-ascii?Q?UG2kyEGYMapvdXzTuk3DCNrU0GXgGHTFsad/FDo10HMBnL5bQoJ3N8KnoddU?= =?us-ascii?Q?Xub91f20aCKAjTZlzoPscSvs+L+MTi/DUeyeC8PU/DYmdlkNPckjKPu9E9no?= =?us-ascii?Q?6ImP2lbYHGZ1SpU7RLMQK21XtWthw5RUfmMCaxVMXfQypMbbA0phT/6I5udT?= =?us-ascii?Q?Wb5l9Mhl2ipaGbpMtflKolisQLI5L3EVG2k/UFY5LxaKGFuKss3389e7Smri?= =?us-ascii?Q?zcWwheVw2tqL8Y49D9LyjuCb+Mdvj+L0w8PVK2P6aAw+Gw+2HRLTebH70XyX?= =?us-ascii?Q?afwz7FnAgMaYsHxIUD5AQLm?= X-Microsoft-Exchange-Diagnostics: 1;CY1PR12MB0854;5:7VGWhKzxofzOtVqUqDTY8DdTOBKqFUkF3k7V2IxDm+8kpUhrsrtZYj27jcwhvoNlWzuk7KIgLtXbnuQg6qG5PVF3uTCs88V9jYWA4yBtG9ANunXFU9cGFvnA6E5IGUkM+C9LcI/fQ6f60marVUkFOQ==;24:F72QifkE3b+097CznURqs0eYgnJcx13b2c6vTbdhowYXo3nR4tBYtTsH9hbUmIKSLbwowfUwq+8YCFr2iQf5YH2aTP8aERn8g74NKaj1bYw=;20:7Mb8/LKF7LZw+JzePsfsDZydEDamiuBLU5Ec91skENGuHOU44v/7mzro2KpMBu7dbb7bnrwZLklwpyOBmKuxEG7EBP74BYBnwWkAEQ3gD0X7Dx1Edkh8wgF7EukohK5Q5rlh92yDXAZGcR4oQ/0/iHT4UvZUXoTyvofR93ljdHBWYdmdZHqKHCmJP0AmDFgLFbkfcN7j68QRyAuVUAhltghX9JfRG7Cdyb3soq6912wg8wIoGYAUbOZEDqi4fkGA SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Apr 2016 05:28:55.7339 (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.221];Helo=[atltwp01.amd.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR12MB0854 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 d8e59a8..400867f 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -279,9 +279,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)) @@ -296,7 +298,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; @@ -306,6 +308,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) @@ -342,11 +346,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; @@ -367,9 +376,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)); @@ -381,8 +394,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; @@ -2314,13 +2333,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); @@ -2358,12 +2379,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); @@ -3035,12 +3059,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); @@ -3158,9 +3184,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; @@ -3862,6 +3890,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