Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933703AbdCVHFi (ORCPT ); Wed, 22 Mar 2017 03:05:38 -0400 Received: from mail-cys01nam02on0048.outbound.protection.outlook.com ([104.47.37.48]:20064 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758874AbdCVHE3 (ORCPT ); Wed, 22 Mar 2017 03:04:29 -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 , Suravee Suthikulpanit Subject: [PATCH v12 07/10] perf/amd/iommu: Modify amd_iommu_pc_get_set_reg_val() to allow specifying IOMMU Date: Wed, 22 Mar 2017 02:02:39 -0500 Message-ID: <1490166162-10002-8-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: e4fe25b4-977c-4925-2ac2-08d470f1972d 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:m0TaTiYz85wkuaBJZXs25N2H5cASWl2OluzNQHGd/QKYwKVMSbnVM+MxNNQLcol4QFosLKW6bKSrTgakswWe27O94p4vV4fyzUEveZUScBP/y2uwUv9GZ4p4weqclYFJrisNJ3Hm4vC9vP4dZF3ieIqKnQuoplhDW7QPS/+aXWW4HYENLL8YfDaepL/FF/m9NQMW92CEsU6g1WSrmZvcJeb0/8N1CgAnHaXmBir2+YfSj4nwRxGbjWhZkrEDKx3XASt6SOPdRSuMlz2YjVwl0JGV4er2b4QJN2J2LmEllKU=;25:cE/+oSu19piuRiIp26eJHepC0Q3R5xKICExUaxe/j/Bxh2xZTxmtutqlDulS9wzF7wl7T8awLxJdmG2/T5CV0cgY2/crwfySsvdvXsP7/SBmpR4jLZxubZSmbLRekkhsehQ+XCAYzTFYyNRP0r9hkbqbbEgZkXoLhpJnvT6fSqaJMoT6Xg85nyxxcr5Y2MzLfcCMtE5V/659BSEx4ZmXcyLVl+ZU5lqW2yAVRRyoC4+UYKBXk9PNo9PHhh7dVR8Uh7yMYqQRP19hdu0/UBcM7zVDT7/tc21mlwM+aD6t2M5tejkaTeb4ibaHtgKAjC/TXad03Gj9lJV6ZLNthy9oGftRzKhWSpv2uchOA/pL5eK8ODiyFDhw+3fDFjZlaJqXcS3rtRbFTPDQvRxZ7xYQWfK3bVokDnh+cj5MPahxsDLMcA+bjGLffJ9P9rrJkkID0gXoKyu4OVJkVpueTt/FUg== X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;31:vRKWj+e/UUKBQTgVD4BxwVHv6+Zs3IRVlHTKjzRDUsxkirygPzeLkFD9XQNA4Ne9akfjLgDo07h0buLKTkaRGFk2T64BFX4gveS8gLeqHRraEttcLSRUUqiQFiEY3SwNFB1BcZ/M2SnquIWZGpz7xO/hkqZ/6cwuZmbdvPcN3Z7RMUFPy0+wLvQoU3b/iNNE8OO62SXPU3hVLkCRmfoU34gIMrohxckxu795G+gE94rKLWXxEu1G35vCNZWPtt/G;20:iCPQR7u4z5fftQgw1l4GmIt5GutEzyfOH/4sdCHNaBsxzNThHn58AOYVVFgFH7WdaHJSyupyYfrKdof42uTQTAKexNtOCCkrPLWcUloulMyKRozrGkNfB1mDGm5dsNjYsP02Jwf+fGA3/4Xx6uAAW+tekunayHOxNwV7H0gskZol2W1b/disaMO6VrZeq+8hSBVrSs3F1rjy1+OLa47ps7viIwKYKLczqTrf65oiWD/dqIerc2ANOG4TblvilTDOO6p0mw1G/qo0uBb+gWviYEk0D1+D6PT9ZnahrkgfpRC8oQInxCsGO47EwEnTLcdH1MK3QC2jaOd0Fhm3Mbqg64QOrfwCNJwBpxyvokAzdCfmpm4kVfJR7zE9dKXQFznHprGqTvsvp8qkew2NWUYWcdUep7Rh3v5VR9QxHR1ZYf+maeHfp7m9irX0wRThqP4Y+947S4oO2PUYHUDS0dC5lagBMuU8/sOkwEkWFRoDIM0sIIut6S1GlU9OHC9QC4r+ X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); 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:xosWJhkFEuo19/eHdS8uRguRKdlZQmhmM+ECav/LfFgSZ8K3sO5lmGCr+1sK2JMlCphS+OF1KoqHqQPzQc89+LIoh0vOQ1abrKbPr+hrtbj60Na/10ruEM6eC/GQ28MGrpz9dPgKRSyQf8rvifukS1z4WtIBACO3TXasrBOdAJpDZPuAgkxFG5SnVh1g62GaWcIDNtC4cspIYsrMDHnIkx/k9rAsMuqDmjgL/BscF2Z1hSY5c3ZKjEgybdtP1S9+UWcoR+cJlbSZT2gCHTCFEGIgnnFXkfPwFoqpoK03f1IgqwbmjQ7NYrjlfjpoXNnKEAjwoj/qbIO0cmnteSOiCRma8oIGYzw8in9Zaxdoy5yMz30QJdH6EjFZomQg4PFVP7yCEaOqYqq0aZdOCyjDNSr0fbCMvK5QdPNTCrWr3kRIeePkQoWnLOU3Dz9dSzVfuUdvRmPNdTQdoaeDqXtSl7RPaiL1mYAMN0U7cxnAFcmwV4yaAYpoPvV2ndwiNbvRTsQfHOtRRmP7igjh1ffYrZm9J4ejxhvgYi/Q5A5U88FmAqRGo7EfPObsyu0pTTRIGmpsMuY+XHkmXplZ0MoXXIFwP7Ko+yaUwcLZVuXG9lIABwWw38NGSYZgca4lzejiJLP4Ca/+oFRHYwq8xEVjICzhqvKnib9W543tWg/hQD4= 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:yg5TieC/xuMYhPpcmmvgP8/JJCnj9OD5UVS9AwESTB/cTHG9KGdm02WPj7W9bIYQBcLyiTjboQqBjp6pLk6hBAuKMBC7MJx1fx0BrX46rJt3ZB9mN4iwmNON3cW0wYDOrxLhheRYeLjcCqU1JuGFdI4QXcDTbl/Lq8DEk4aUmuFBQE40/ncJzw2sWezDpzL5wnTJtJv8mAD00KxpZXnInLJui0tSKlHLmG0aqPJajRtbSaJRZzkK4QAmuIMRkO/ThhSRHnbtmn0pZ2oUhwCgUOxqqAGSRFnSkrKVfTorqKKBBKkegTKyJlGQQz6hc4xftaLDpfC3fTkKnu4YS93BP8uQbP25AZEGeaLwYbxZTunG3ufr4MhpUfC+NU+e/EuA/C+PjtmcQOeTcND+xzjRancLhAfJLNEVD/tzM6rX3VmRahsxjVRZ2FEYO6+smxR+uBhHUAqp9alHMA0lBPX25Vlvi351ZKOWrrQkCGC3Bh3NVqkO4iKd4ImQ9tVEQcCUVetrX9RPk4NCszr6UCKR1de5t0yC8/aEX+lHk1S/wPY+rCaSGNdxoUNmF4sj0JQKsDE/t4uLSYODMGZXVrzsFtM3ZYm6xidmeSoQtJDs7o+UgIf1MeD2M/2yOUlF0buO0xuCrySBnD9ntpwOUPCYkju3uToHMVczWzt/eISyb57S0KbvNxJQv3hKuOAsFbhTzTrbrXJFFZID3HjYTGcR/xVGG3XaAxbxmwam9FF/n/P/GXZ9xaXppFMDgNeFti1DzLhCYBDlqskbY7vbc6psbwyz94hMmQ7Ng7JO6QgZz6pQsAT/FphMNiYXcaNkC2t70DjTRYwIblblHg6ltb0XHO5tMYxEIOR+xsY3MM3nXdycBDoODnQxu5BQdVuzSbEO34HZ46a2OwCTqViDd+bHvyhT8f+8dTXTosdENttCAZYvfqMnGdlcG7KJB3D7MHAx X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;6:RrGNY5nVe4/W1KK101uY5DjE3vUO93cxJNKJCdUgGY1lUmlaSPaXBDm4XMYe77wkYKOPx6djxsb1MK3xb2weJEG1FaIiz3lTxzwk0NtkXGjT4givMVIj+zUweptiaCDyOtw6qjoGQZiPjSDaz3Z0lGDNhTnvOOR0bD/JN69DgqgnzkevtOVyxSsqsCZJ3XnX6J1WAZyrDXz1+7IUuF+nIcuFOVofhs0vcGyNB03mQ1d6RkHXZVb8fTLM89gbOsnr4tSp/5dgRhtfrs3DhR+WkgZFHMnsjSiiRIH41/BCwCuwxcwddEIwqyeMRFbnylqP8K8CufaH9VfUHjWWd9ELkjalm3OMWo/MlPzI0703D+l2RIeq0gmJjQeKKT/Oa02NADhqc66d+awHUba9uHv6drxjQSAUGgHIZuV5z2/Piew=;5:TCghGbvxFlYIZC+AKcuVQtsmljtvXcWWm7q6+o9XIbjwX+JmGKwzwgwvTkLfvsZNjgontcmw3QC0Rfn43m9C3/hAWspXWM7jUDZd5XPJZ7YFuU79ruZVgjdVSe3uSXXb2LO0oVUC8vaiEzw/Xg0DwQ==;24:z6Zo/DrXroL+QW8Ocbd4iwlXXqTTFP8htgBraKts+Ypsk1oXBGU9FEttiAXM197v5RZLNSaTN/CObJmxhRnq6Y1NZk85YZhv9urnZ/NNdi8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;MWHPR12MB1454;7:vpGYMDnfU+doWqbmTQElLfrFUSPfmwrnBE6bWU7fhrgtjaCIQEf2D8BUVyv8/F6nTIDh862aMBIDdp12v+gvO0hyN7j+rDqlCveU0F/FXsS+/snGapfopAoal4REqqCXeU6+c9feg3dlWsPespDZTZp7/pwnHKjW+aT+FATnhlaHcjIe8PVZVHFfy6aKYpalHM271FFzC7fJ3wEguiBFdShQRKr1SW7MDq7S0NIC8d75O6ich5JSK0hWRlSwVHIXJFwaqX5HihxOfFbTJfDQA18mVBz+ECKeKXxoxsRxlPAwptij4WCNsvQzkx1l6Fm3l89jT9/wXo4xAMA7CAdp4A==;20:fHMoSutlVRxBXCreXJu8UDAt1/8e4QdjH/OV1ai1diPC3v8Asm3ZKnMjt1PzpyxqyOi/lFABwTsf6xec+V0XqkzXiVgSbjNQq9hFlhMiBmm+EIw8ZvG5Xy2eZ2iq5SepYMOPYMGKulD2cC0jg/cfRwpAikPe8Px5VliR99h/VpJXljTcwouBbwYUr6uUG3u11hRfTFRlHHrZPlmAdGmTpi7JRutOr8gFox+t1lFZmVIBtZNICiZ8A+OmLr98fRUa X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2017 07:03:41.8400 (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: 8603 Lines: 244 From: Suravee Suthikulpanit The current amd_iommu_pc_get_set_reg_val() cannot support multiple IOMMUs. So, modify it to allow callers to specify IOMMU. This prepares the driver for supporting multi-IOMMU in subsequent patch. Cc: Peter Zijlstra Cc: Borislav Petkov Cc: Joerg Roedel Signed-off-by: Suravee Suthikulpanit --- arch/x86/events/amd/iommu.c | 38 ++++++++++++++++-------------------- arch/x86/events/amd/iommu.h | 9 +++++++-- drivers/iommu/amd_iommu_init.c | 43 +++++++++++++++++++++++------------------ drivers/iommu/amd_iommu_proto.h | 5 ----- 4 files changed, 48 insertions(+), 47 deletions(-) diff --git a/arch/x86/events/amd/iommu.c b/arch/x86/events/amd/iommu.c index 10f67d3..88fbc80 100644 --- a/arch/x86/events/amd/iommu.c +++ b/arch/x86/events/amd/iommu.c @@ -248,49 +248,45 @@ static int perf_iommu_event_init(struct perf_event *event) static void perf_iommu_enable_event(struct perf_event *ev) { + struct amd_iommu *iommu = get_amd_iommu(0); u8 csource = _GET_CSOURCE(ev); u16 devid = _GET_DEVID(ev); + u8 bank = _GET_BANK(ev); + u8 cntr = _GET_CNTR(ev); u64 reg = 0ULL; reg = csource; - amd_iommu_pc_get_set_reg_val(devid, - _GET_BANK(ev), _GET_CNTR(ev) , - IOMMU_PC_COUNTER_SRC_REG, ®, true); + amd_iommu_pc_set_reg(iommu, bank, cntr, IOMMU_PC_COUNTER_SRC_REG, ®); reg = devid | (_GET_DEVID_MASK(ev) << 32); if (reg) reg |= BIT(31); - amd_iommu_pc_get_set_reg_val(devid, - _GET_BANK(ev), _GET_CNTR(ev) , - IOMMU_PC_DEVID_MATCH_REG, ®, true); + amd_iommu_pc_set_reg(iommu, bank, cntr, IOMMU_PC_DEVID_MATCH_REG, ®); reg = _GET_PASID(ev) | (_GET_PASID_MASK(ev) << 32); if (reg) reg |= BIT(31); - amd_iommu_pc_get_set_reg_val(devid, - _GET_BANK(ev), _GET_CNTR(ev) , - IOMMU_PC_PASID_MATCH_REG, ®, true); + amd_iommu_pc_set_reg(iommu, bank, cntr, IOMMU_PC_PASID_MATCH_REG, ®); reg = _GET_DOMID(ev) | (_GET_DOMID_MASK(ev) << 32); if (reg) reg |= BIT(31); - amd_iommu_pc_get_set_reg_val(devid, - _GET_BANK(ev), _GET_CNTR(ev) , - IOMMU_PC_DOMID_MATCH_REG, ®, true); + amd_iommu_pc_set_reg(iommu, bank, cntr, IOMMU_PC_DOMID_MATCH_REG, ®); } static void perf_iommu_disable_event(struct perf_event *event) { + struct amd_iommu *iommu = get_amd_iommu(0); u64 reg = 0ULL; - amd_iommu_pc_get_set_reg_val(_GET_DEVID(event), - _GET_BANK(event), _GET_CNTR(event), - IOMMU_PC_COUNTER_SRC_REG, ®, true); + amd_iommu_pc_set_reg(iommu, _GET_BANK(event), _GET_CNTR(event), + IOMMU_PC_COUNTER_SRC_REG, ®); } static void perf_iommu_start(struct perf_event *event, int flags) { struct hw_perf_event *hwc = &event->hw; + struct amd_iommu *iommu = get_amd_iommu(0); if (WARN_ON_ONCE(!(hwc->state & PERF_HES_STOPPED))) return; @@ -300,9 +296,8 @@ static void perf_iommu_start(struct perf_event *event, int flags) if (flags & PERF_EF_RELOAD) { u64 prev_raw_count = local64_read(&hwc->prev_count); - amd_iommu_pc_get_set_reg_val(_GET_DEVID(event), - _GET_BANK(event), _GET_CNTR(event), - IOMMU_PC_COUNTER_REG, &prev_raw_count, true); + amd_iommu_pc_set_reg(iommu, _GET_BANK(event), _GET_CNTR(event), + IOMMU_PC_COUNTER_REG, &prev_raw_count); } perf_iommu_enable_event(event); @@ -314,10 +309,11 @@ static void perf_iommu_read(struct perf_event *event) { u64 count, prev, delta; struct hw_perf_event *hwc = &event->hw; + struct amd_iommu *iommu = get_amd_iommu(0); - amd_iommu_pc_get_set_reg_val(_GET_DEVID(event), - _GET_BANK(event), _GET_CNTR(event), - IOMMU_PC_COUNTER_REG, &count, false); + if (amd_iommu_pc_get_reg(iommu, _GET_BANK(event), _GET_CNTR(event), + IOMMU_PC_COUNTER_REG, &count)) + return; /* IOMMU pc counter register is only 48 bits */ count &= GENMASK_ULL(47, 0); diff --git a/arch/x86/events/amd/iommu.h b/arch/x86/events/amd/iommu.h index b775107..62e0702 100644 --- a/arch/x86/events/amd/iommu.h +++ b/arch/x86/events/amd/iommu.h @@ -24,6 +24,8 @@ #define PC_MAX_SPEC_BNKS 64 #define PC_MAX_SPEC_CNTRS 16 +struct amd_iommu; + /* amd_iommu_init.c external support functions */ extern int amd_iommu_get_num_iommus(void); @@ -33,8 +35,11 @@ extern u8 amd_iommu_pc_get_max_counters(unsigned int idx); -extern int amd_iommu_pc_get_set_reg_val(u16 devid, u8 bank, u8 cntr, - u8 fxn, u64 *value, bool is_write); +extern int amd_iommu_pc_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, + u8 fxn, u64 *value); + +extern int amd_iommu_pc_get_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, + u8 fxn, u64 *value); extern struct amd_iommu *get_amd_iommu(int idx); diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index 8fdf109..5a11328 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -256,10 +256,6 @@ enum iommu_init_state { static int __init iommu_go_to_state(enum iommu_init_state state); static void init_device_table_dma(void); -static int iommu_pc_get_set_reg_val(struct amd_iommu *iommu, - u8 bank, u8 cntr, u8 fxn, - u64 *value, bool is_write); - static inline void update_last_devid(u16 devid) { if (devid > amd_iommu_last_bdf) @@ -1484,6 +1480,8 @@ static int __init init_iommu_all(struct acpi_table_header *table) return 0; } +static int iommu_pc_get_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, + u8 fxn, u64 *value, bool is_write); static void init_iommu_perf_ctr(struct amd_iommu *iommu) { @@ -1495,8 +1493,8 @@ static void init_iommu_perf_ctr(struct amd_iommu *iommu) amd_iommu_pc_present = true; /* Check if the performance counters can be written to */ - if ((0 != iommu_pc_get_set_reg_val(iommu, 0, 0, 0, &val, true)) || - (0 != iommu_pc_get_set_reg_val(iommu, 0, 0, 0, &val2, false)) || + if ((iommu_pc_get_set_reg(iommu, 0, 0, 0, &val, true)) || + (iommu_pc_get_set_reg(iommu, 0, 0, 0, &val2, false)) || (val != val2)) { pr_err("AMD-Vi: Unable to write to IOMMU perf counter.\n"); amd_iommu_pc_present = false; @@ -2765,15 +2763,18 @@ u8 amd_iommu_pc_get_max_counters(unsigned int idx) } EXPORT_SYMBOL(amd_iommu_pc_get_max_counters); -static int iommu_pc_get_set_reg_val(struct amd_iommu *iommu, - u8 bank, u8 cntr, u8 fxn, - u64 *value, bool is_write) +static int iommu_pc_get_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, + u8 fxn, u64 *value, bool is_write) { u32 offset; u32 max_offset_lim; + /* Make sure the IOMMU PC resource is available */ + if (!amd_iommu_pc_present) + return -ENODEV; + /* Check for valid iommu and pc register indexing */ - if (WARN_ON((fxn > 0x28) || (fxn & 7))) + if (WARN_ON(!iommu || (fxn > 0x28) || (fxn & 7))) return -ENODEV; offset = (u32)(((0x40 | bank) << 12) | (cntr << 8) | fxn); @@ -2799,17 +2800,21 @@ static int iommu_pc_get_set_reg_val(struct amd_iommu *iommu, return 0; } -EXPORT_SYMBOL(amd_iommu_pc_get_set_reg_val); -int amd_iommu_pc_get_set_reg_val(u16 devid, u8 bank, u8 cntr, u8 fxn, - u64 *value, bool is_write) +int amd_iommu_pc_get_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, u8 fxn, u64 *value) { - struct amd_iommu *iommu = amd_iommu_rlookup_table[devid]; + if (!iommu) + return -EINVAL; - /* Make sure the IOMMU PC resource is available */ - if (!amd_iommu_pc_present || iommu == NULL) - return -ENODEV; + return iommu_pc_get_set_reg(iommu, bank, cntr, fxn, value, false); +} +EXPORT_SYMBOL(amd_iommu_pc_get_reg); + +int amd_iommu_pc_set_reg(struct amd_iommu *iommu, u8 bank, u8 cntr, u8 fxn, u64 *value) +{ + if (!iommu) + return -EINVAL; - return iommu_pc_get_set_reg_val(iommu, bank, cntr, fxn, - value, is_write); + return iommu_pc_get_set_reg(iommu, bank, cntr, fxn, value, true); } +EXPORT_SYMBOL(amd_iommu_pc_set_reg); diff --git a/drivers/iommu/amd_iommu_proto.h b/drivers/iommu/amd_iommu_proto.h index cd2257e..466260f 100644 --- a/drivers/iommu/amd_iommu_proto.h +++ b/drivers/iommu/amd_iommu_proto.h @@ -57,11 +57,6 @@ extern int amd_iommu_domain_set_gcr3(struct iommu_domain *dom, int pasid, extern int amd_iommu_domain_clear_gcr3(struct iommu_domain *dom, int pasid); extern struct iommu_domain *amd_iommu_get_v2_domain(struct pci_dev *pdev); -/* IOMMU Performance Counter functions */ -extern bool amd_iommu_pc_supported(void); -extern int amd_iommu_pc_get_set_reg_val(u16 devid, u8 bank, u8 cntr, u8 fxn, - u64 *value, bool is_write); - #ifdef CONFIG_IRQ_REMAP extern int amd_iommu_create_irq_domain(struct amd_iommu *iommu); #else -- 1.8.3.1