Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758915AbdCVHEt (ORCPT ); Wed, 22 Mar 2017 03:04:49 -0400 Received: from mail-cys01nam02on0087.outbound.protection.outlook.com ([104.47.37.87]:25814 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758838AbdCVHEU (ORCPT ); Wed, 22 Mar 2017 03:04:20 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=amd.com; From: Suravee Suthikulpanit To: , CC: , , , , Suravee Suthikulpanit Subject: [PATCH v12 05/10] iommu/amd: Introduce amd_iommu_get_num_iommus() Date: Wed, 22 Mar 2017 02:02:37 -0500 Message-ID: <1490166162-10002-6-git-send-email-Suravee.Suthikulpanit@amd.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1490166162-10002-1-git-send-email-Suravee.Suthikulpanit@amd.com> References: <1490166162-10002-1-git-send-email-Suravee.Suthikulpanit@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [114.109.128.54] X-ClientProxiedBy: SG2PR01CA0012.apcprd01.prod.exchangelabs.com (10.165.9.150) To MWHPR12MB1454.namprd12.prod.outlook.com (10.172.55.135) X-MS-Office365-Filtering-Correlation-Id: a4ab5421-073a-454d-f851-08d470f190e9 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:MWHPR12MB1454; X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;3:GLvlHC/nc9DRBk87lbwHWXGKvLsiBCtp1frj2d3lLFNIoBMBe3SSEFHNCII25v6gsrdQOAiE2z4Ag1BTLRkqh+Hxdv6bhjD4whq07qG6HkoCoNjUbgXFdUlokKmBmAJ0NGLvr6szYdIQGJxSsYcl4QjzySzCg1dfls4BZpMZAqSPK5DFWuILYptlhnzcwnHfjt6VcuEcCWahhsI/HbivpGIDLfLQNrbj4FHt5RD2PFSwEd4YvFHR8ZUexetq6Av7M65BfWWS707Kd8mz7sM4rRU+0XsnsREi+TF3a1dhTng=;25:sHuJuKYUL65IYzCQW0DLtfEQHuJ8RTGV99oe5wQAhXJ22Nkd4BxVzxXmFR2s/AMsVTl/ZGBxi+18HbbZOgq+kyqabnjQib/2L3hJT6nCwrLf+gomWdVQIwDoyldwuYgPfvUxPcWY59JYpqln5OIfJHzFB/pXPdQJooEmcL43AhZwwdkl2qJJgpWE7cQkftuTBi5UFY13E0JoUjoeBSB3KRbyWP+/T559MyNNB28JrtnH8Q+Gs/P5pONJKwvzhPE1aDj9JuaYR+EefAM3CGkRtJ/l8gKVcKxMUTxGYB08nFZaV5QlksGNpRdfNofR+0FuPk5IptJSWIWNwrSXaxz8KvAE3lATTP1q25sHMXN2xu8ETg3KVlzkOdqj6Dwbp1Cvpjr9f5sozSnrAiGr6p9lVOHdmBgoxAoHlxQVkKf06b7p9BXk0A8eorFlPNDF2seMhXI2/iRyJBiGDn6MEZL9ug== X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;31:6wWHW47lQgLet06a/slgNbs/69kyhB12D6Ij+P0/mkHQpiaUyKLf1DSpyj1Ia/JOjxQKm+tFhWgrx3zoQdD9whuOgN0gY6N525dE5uoeJIhIu4iadQlm5FTm+yuYqrqUuPBs1cVHXZmZYJ/xENsYhjxWLrfc0w46IvX6nZoiwjgituRkURJI5Tj6AVUWVy7kp74Qbk8ATJC7lI3xLP9GTOXx0XZxbd9PXd7nK/sfnkw=;20:a590x5u6aPyRI9jii/nqMw7uEB8OmsIw72MuRevtEhMJKznSW0bI+L6bhOIWJwrv9gsmBrWxfVq8aQYSz2RV+JHCbzCAhkioCyMWZHmwKmZhJmAr5fpPlxoHUKLYDTO+ZQoo6DCwAYCZHdzgxmd94AXZlS8X3HifIW6hIPSjXxb7YZxvK6RcJtFqWTZFZTbsuGOj99ZhRdiCZAyCE76PFExyCjF9x5cNi/qIM4up4gVGTcvwnkveYASrZ+WbHSCi8cc47pihrLenEImCGR7QOXvmqgJXHl144WNA7WCzl4w35i/VMc2ZCuokO5igSZr6qgcN+YtrBKyXh6jCCueEOz2JFtQNibZcVbRHgJola7eqD5I7Jt0dWybhG21ni1cLrh2oXMLZ4Bl1ER/JVv/hNUMru4s/DkbepJVYnargCOsb+4GjBk5FDJEmM+k2es0IbloLoXM2C+5MhpbfTmWmaNnwcNWAw4Vb3e67Nj8ck8X6QfZVndcE6cbGwJmZvdi+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110)(788757137089); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6041248)(20161123555025)(20161123560025)(20161123558025)(20161123562025)(20161123564025)(6072148);SRVR:MWHPR12MB1454;BCL:0;PCL:0;RULEID:;SRVR:MWHPR12MB1454; X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;4:G72XZQWTgXzn8JgtKvr11TqGq0tU8Ql8L4Ge5ybpJxhdvKL2o/Z1jce4ednWMOucJrWYM1k72KpWUxFgsbm7EFFUN9Lvq+LGjnAHnRJfNRC8VmfHfiOzjJTIKQv6eDgmr2tskwl7zz28Cn//Gdwx6DrXWEEqAtbLEI/xRCSRVWizFmqW5i5bqLMGQHWPWTSOzymH0TkOU+fdcUD/2E9Hqo+uc8THnoyPJbDoSN4V8p4gi4RnDbOb5zwhc6c+zwF9f4Vf+4dbCdyJAp8EadfSEIrSv1Agdt9nmqJHa/Yv+j92aJ0qS8mbth/uQiuAzoYbwtlAUgMSY0tuO/8t8RAV3oHMomwG4wJuimAXfUTVI3Rw+hxaWMkXYW6d8MFENzoynHsH0cjb7iXNVI4YjQ0PEmMYT323iSF6bBqqwxgLRuh1/jWXBIHPHG9KecXDZ1RLif5wZANSWOmVS4r2QYZnBZuBnqCCX9TGAW4kyHIqIM0rdU+JPquUH7qXXeXSO0EI3Za1hkznBi1ElZancJZ8Xk0Jhk6nCRwDTx6IjtOxaReFJUFTvoxl2mLr3Y0Lkyvpm2FwRDpwZdMg4c3uMQfO4wqyL6MMEep4C5iN52zXumPA7+Jnxx+cBNKLH7rnUcnognQrkqD3wAXLG7m0zYW/Icl/xXYD6QsxSu+UBek04j0RRmXuHJBnAQksldtyQO3Z X-Forefront-PRVS: 02543CD7CD X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39410400002)(39840400002)(39860400002)(39450400003)(39850400002)(50466002)(189998001)(2950100002)(4326008)(6486002)(5660300001)(50226002)(8676002)(5003940100001)(47776003)(66066001)(81166006)(53936002)(6506006)(50986999)(76176999)(4720700003)(54906002)(2906002)(42186005)(38730400002)(7736002)(36756003)(305945005)(6512007)(3846002)(6116002)(86362001)(25786009);DIR:OUT;SFP:1101;SCL:1;SRVR:MWHPR12MB1454;H:ssuthiku-rhel73.localdomain;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;23:CzmcaSihRw3p4WDGB/PKyXq/f8w9L5WwdCXwgYPE0tMwQXSf/4RY96ovFTCbDSiWIi+ZPNWkRZZ846hYN2gu2fqzdek0oWeW9lnMqI8g4USbXsPQVKIDz0L+mt68v+c8Y0LIcZ+RzLJhuGmpADJk9ZljNBpu+82dJSURfEMGgvxRi6LUzDswgzoWCXTjm6nFZ2u2otFuUSeA0eRKifyYKdGG1Ymt6b7aanxSLOHgk4U8cdUqjfSeoD+2gQQTJQwTxasDwuV+dOaP8WbubOmHoO0UNdGRRQAmxn84BEA6TJjibgnT7kxyWpxphZm6ZV5LgTJnu9sUghj8AopIYUn71nvJG2/x+ADdDt3WcpAl5gBy/k5uQChPeEtORVR9X7nbnvNbOnE3VAe4Jw7++5SGFdQ3TfFNtMWDVkysy4FadR37uh+LaTuEDLPQKrmvlDgkGvxb2kOTiYxQYSI/OnElL1TaNGyMVQCLUCodzZb1rUzePgbqlM/l/t0zLrH1YPJAktE7jTE8UpT0t22y2U2vDRN2dqHpPjVHFsTLUWZW0QlshKYAhvwZhkj0LUTAe4O58wmp6hubtS9Vrtl+SQHlYHISP1bvw5U5yRbP70J4OUB5g8CiZQP5CLvoz0t5/mMjtTEl5PMMur7RRDcNTprkJYCtm8PIp7zBDXcKG00yRx3b3gMlBu3oy+lbUDPs7+xsdWUpCAaoQwBmNBiS9NDeCJ/A9jr4nr5r6PDKR8jrQhJ+WwvaBXxO31gaLjHl243hKVOiPbjPaYkbvjP3GN1WY2rbXEnYO90JD3dM6mqW0hokObpj1EOJBhuD7qhooNpMQUVhgiEw2WkiZ1OoYrQmAk5/wKM3xOD8cUdIlEfRzjgQBv7JhhbSmS6YQZCQD0X/GiyFz2/SKuNLawyUFBmjuo3NKs08ZNg+J5QAW8RVQW1UhIPAyeGFAC/2gDtlJAPV X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;6:zERRYbayxK9xL/gV19qd9UKJPnGv4pxvhMw3C/R9QgnLB/k7WUnSsJGV05UO/q27/kNQmlLnslxUSpl9eWdxo8sMtEkTHREA6RIxH/sstLf5KH839tDGA8jcmDQUvNjiVs7bdBchyIWHeB+McvVD58pZTi63gEK+gAVSN8s5ZVrB3kZzwf3kYG0IN20PqOBjzlURXGwhP97D3bb+rSvRXoQyONu9PQmEKhXQQSjMW1dn2zUPkrSQJjL92qa1OUFPqJCTWetV3Au9T90WIe4JIgSlwjavC7J8PuWPhEK+J5kIxdR6knTi/ADwzNupKEGHXrPH9Ui3g72Ed+/Y5hhzARtbawzJw6JHoM+/dFPRvnkZ1N9pjestK/M+tPzRCcpFfBlXs1xaDGwa3s5NSxKsYCQeimCsKUTJDwtAv3wk9yo=;5:VGrrUEHFLElUlzLAM9NhOWBFWO6P2+DU8D2f4ypjQq3vQc9QHcQomX0ZPqM3jWzsUW8XiqI7tJRE1kvyNzYtvHxZiyxqESXVhT2/OKdOj2oE1j48G3pQhOqn8XOEdqEIo4tm3bBdFm42Bk7P3ow3Vw==;24:aANhJ7IDH/FM5QqRnpznoC0GZlALwIZdyTN9G6J+pDC/NMdFvrOCk+a5DHdFZUztWi2RH35a5iVWAQ3x2KYfc33xawEfko7z/N7lYGFjb+0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;7:VToDi8gZP7tUcgyG5MpLVeajgvpaXFr2f2UFcMCq6QZMsgXHO4C2PKXe1OWwqSuB+yHnqbE4xqb5400V0TvEMPcD2T+j9tNSH4bxKWdcfb8Ed60zXaGnqlyZwyzfO9pydAWtNLf6TBWOHUGQV05oJXYj/eZwKIN5TK7eee5mkAEi+m3guE7ywGcHKvszmmuUeDJRXVkA+pcOXqcM7A6iPAgvuZajTG8Q9Xmr4pDH8aCYmwsAtsl3Xt19bqwS1PYOenOKnKlA0HpEP9Txhlkh4wDcnIdyN9Qmjh5HElLrBTVHc/KrBdyxPjMuCIWKtGYGFVUhIMfcooeYC2rmMiHRtw==;20:jTqigzSt5ekjA1jM9w2V+avzybzGOPx02rpRVnvpXC9VuOPch5ccxHgfQxICIfbgiRxm33Gs99qtBy8aK9mJmuuYGGO/ee1wpiGcL59CXPViEu721L9MJhFesLWMVESk5II8yrnSb0rPY0gagRTycA2vNUfcnjWViVoAiTUaBqbTMNHzSSRuoFZaQ8dobAyxrkF/gaD/qCdVCLJ8k61PbG3nd0LnNHKxoiyWxg37tgCJVQfwkgqCo3BDyCBTPA9f X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2017 07:03:36.5997 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1454 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4222 Lines: 125 Introduce amd_iommu_get_num_iommus(), which returns the value of amd_iommus_present. The function is used to replace direct access to the variable, which is now declared as static. This function will also be used by Perf AMD IOMMU driver. Cc: Borislav Petkov Cc: Joerg Roedel Signed-off-by: Suravee Suthikulpanit --- arch/x86/events/amd/iommu.h | 2 ++ drivers/iommu/amd_iommu.c | 6 +++--- drivers/iommu/amd_iommu_init.c | 11 +++++++++-- drivers/iommu/amd_iommu_proto.h | 1 + drivers/iommu/amd_iommu_types.h | 3 --- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/arch/x86/events/amd/iommu.h b/arch/x86/events/amd/iommu.h index 845d173..5c5c932 100644 --- a/arch/x86/events/amd/iommu.h +++ b/arch/x86/events/amd/iommu.h @@ -28,6 +28,8 @@ #define IOMMU_BASE_DEVID 0x0000 /* amd_iommu_init.c external support functions */ +extern int amd_iommu_get_num_iommus(void); + extern bool amd_iommu_pc_supported(void); extern u8 amd_iommu_pc_get_max_banks(u16 devid); diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c index 98940d1..5d4dd94 100644 --- a/drivers/iommu/amd_iommu.c +++ b/drivers/iommu/amd_iommu.c @@ -1234,7 +1234,7 @@ static void __domain_flush_pages(struct protection_domain *domain, build_inv_iommu_pages(&cmd, address, size, domain->id, pde); - for (i = 0; i < amd_iommus_present; ++i) { + for (i = 0; i < amd_iommu_get_num_iommus(); ++i) { if (!domain->dev_iommu[i]) continue; @@ -1278,7 +1278,7 @@ static void domain_flush_complete(struct protection_domain *domain) { int i; - for (i = 0; i < amd_iommus_present; ++i) { + for (i = 0; i < amd_iommu_get_num_iommus(); ++i) { if (domain && !domain->dev_iommu[i]) continue; @@ -3363,7 +3363,7 @@ static int __flush_pasid(struct protection_domain *domain, int pasid, * IOMMU TLB needs to be flushed before Device TLB to * prevent device TLB refill from IOMMU TLB */ - for (i = 0; i < amd_iommus_present; ++i) { + for (i = 0; i < amd_iommu_get_num_iommus(); ++i) { if (domain->dev_iommu[i] == 0) continue; diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index ce65a47..d3ec9c3 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -167,7 +167,9 @@ struct ivmd_header { /* Array to assign indices to IOMMUs*/ struct amd_iommu *amd_iommus[MAX_IOMMUS]; -int amd_iommus_present; + +/* Number of IOMMUs present in the system */ +static int amd_iommus_present; /* IOMMUs have a non-present cache? */ bool amd_iommu_np_cache __read_mostly; @@ -272,6 +274,11 @@ static inline unsigned long tbl_size(int entry_size) return 1UL << shift; } +int amd_iommu_get_num_iommus(void) +{ + return amd_iommus_present; +} + /* Access to l1 and l2 indexed register spaces */ static u32 iommu_read_l1(struct amd_iommu *iommu, u16 l1, u8 address) @@ -1336,7 +1343,7 @@ static int __init init_iommu_one(struct amd_iommu *iommu, struct ivhd_header *h) /* Add IOMMU to internal data structures */ list_add_tail(&iommu->list, &amd_iommu_list); - iommu->index = amd_iommus_present++; + iommu->index = amd_iommus_present++; if (unlikely(iommu->index >= MAX_IOMMUS)) { WARN(1, "AMD-Vi: System has more IOMMUs than supported by this driver\n"); diff --git a/drivers/iommu/amd_iommu_proto.h b/drivers/iommu/amd_iommu_proto.h index 7eb60c1..e8f0710 100644 --- a/drivers/iommu/amd_iommu_proto.h +++ b/drivers/iommu/amd_iommu_proto.h @@ -21,6 +21,7 @@ #include "amd_iommu_types.h" +extern int amd_iommu_get_num_iommus(void); extern int amd_iommu_init_dma_ops(void); extern int amd_iommu_init_passthrough(void); extern irqreturn_t amd_iommu_int_thread(int irq, void *data); diff --git a/drivers/iommu/amd_iommu_types.h b/drivers/iommu/amd_iommu_types.h index 003f3ce..4de8f41 100644 --- a/drivers/iommu/amd_iommu_types.h +++ b/drivers/iommu/amd_iommu_types.h @@ -611,9 +611,6 @@ struct devid_map { */ extern struct amd_iommu *amd_iommus[MAX_IOMMUS]; -/* Number of IOMMUs present in the system */ -extern int amd_iommus_present; - /* * Declarations for the global list of all protection domains */ -- 1.8.3.1