Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp867000imm; Fri, 11 May 2018 07:34:58 -0700 (PDT) X-Google-Smtp-Source: AB8JxZqeaF3j/kg1ASTFWKT06lVOQCe1VmULWksb0m/GDpMkXhIeyeRM4YVnxVLT4pWDWGmx14J5 X-Received: by 2002:a63:6d8f:: with SMTP id i137-v6mr4686003pgc.268.1526049298114; Fri, 11 May 2018 07:34:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526049298; cv=none; d=google.com; s=arc-20160816; b=RF55uPVfJMw59N12ZTqLbBcKiJQdbVSkzMMzjFza8ctrRejpmFOL6xLa5nPobP7Otv qxVSm+mmEcwo87ZwKydvzQrEyn5IFPeebie8CQx9iLoT3tqPNIIVkUC5d85RmioIHHmn JCELABMqRy1k3JhDNKyB2lpaja+mJ3QeA+ghFfQ+1kMBWJYDJ9gHzf0VWy/Yqmydggfw 0sXquQBzz6C4SbvDl0zOw+cpDaj0/0F2E3kxUIxNoDZpf3l5+Vp91LneIDKlr1xahGDH 5YVDUoSA3uJqkrGopUH0mHAtbZ1hmjA26O75nlTS4c2zqVM2BuPA9ztuvCvH3XR8dAqk Om5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:spamdiagnosticmetadata :spamdiagnosticoutput:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:cc:to:from :subject:dkim-signature:arc-authentication-results; bh=KggbQgZhGOwtLPaHhBZTcTYI2INVrIIRKjObQT8OjH0=; b=IrZ+pjomijU/3ku76Bx/bjoHo6PaEE3cFAkJAXosIq9IhBOwajGRHQkUor7ECmsLwy wz8TsnqCYAWNvAwT7Gp3DFEV8GSq0LjmywxfTdN1Q3dCPx6WGV/ENDxAMAkb9713nouO HIkrB3Ha6/zJ9+n4IjfXpqUqkY7u6V3xcypVniWBWc/EDsoDgGW76yW4yjSo8iLRiDN8 yFq/OESJCelWGDA/kEeO0jXI54Ksrs2Ebz9NWWC/oWWz2+kkFatPy7FouJrUf5zXb+w2 idUcJAe4TvOEt8PW7DG2g6al9T5CnKIxZceCpbGCW+HYVQPApSV9CK+HvjUn+7mZYDVj 6AyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector1-amd-com header.b=QajnDlVN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c65-v6si3474014pfa.99.2018.05.11.07.34.43; Fri, 11 May 2018 07:34:58 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@amdcloud.onmicrosoft.com header.s=selector1-amd-com header.b=QajnDlVN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753221AbeEKOeS (ORCPT + 99 others); Fri, 11 May 2018 10:34:18 -0400 Received: from mail-dm3nam03on0087.outbound.protection.outlook.com ([104.47.41.87]:64732 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753191AbeEKOeQ (ORCPT ); Fri, 11 May 2018 10:34:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amdcloud.onmicrosoft.com; s=selector1-amd-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=KggbQgZhGOwtLPaHhBZTcTYI2INVrIIRKjObQT8OjH0=; b=QajnDlVN26EEO5h/nvc8pcVelIoV5UTRbk4sXdArBTjosIoqpgN1yH2I2/mHOOuSxARToYxPXmQsXjff3ivoo6zZYqOU96Qq1a29b3PCn5sijjlQGh5rgV5pfDJfsQSeHQgvVgUSKhtMmvi9bNokRdqUoYC1OH/URzPpZnlbYXM= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Gary.Hook@amd.com; Received: from sosxen2.amd.com (165.204.77.1) by DM5PR12MB1451.namprd12.prod.outlook.com (2603:10b6:4:d::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.755.16; Fri, 11 May 2018 14:34:14 +0000 Subject: [PATCH v6 1/2] iommu - Enable debugfs exposure of IOMMU driver internals From: Gary R Hook To: iommu@lists.linux-foundation.org Cc: joro@8bytes.org, linux-kernel@vger.kernel.org Date: Fri, 11 May 2018 09:34:11 -0500 Message-ID: <152604925157.106201.5299224478351644530.stgit@sosxen2.amd.com> In-Reply-To: <152604905217.106201.15533883255216330970.stgit@sosxen2.amd.com> References: <152604905217.106201.15533883255216330970.stgit@sosxen2.amd.com> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: SN2PR01CA0038.prod.exchangelabs.com (2603:10b6:804:2::48) To DM5PR12MB1451.namprd12.prod.outlook.com (2603:10b6:4:d::12) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(48565401081)(2017052603328)(7153060)(7193020);SRVR:DM5PR12MB1451; X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1451;3:hWNqP3peOqabVMdAsLGtOSPW7cvdlSnz0u12t31x4eIfvrKkDw/u+7XwB4tkOQP+Lx3vYwDugsyCVavAVQpw64I7yPm7zyxajQAJ8Z+0/TlCVNEbtZNymEZ5Sre5hWq8DGqc+jViA0KYAnSg9cJk+u6Ouj85LaNQVvhMKyKvmdIViNJxjA/GRHNJBsW6m4sv+WJtcbzROCbdFwTRZHJJjQnZ80LDmGSLpcyJQKqWZ7VvH86/K6Sdk3OS6WFjFzTe;25:SYI+SzTw+9b/pp+ZJGqjrT5RiuBuzVpKEagwYnRhflMJLbRFO0LjGh3UbVa8lrjWwrtp4wWr3jjm5qqVx/f/yeGTE6UZVMolSdLX/i7tC5mPWr6fH8vkA1MT8puMw6P2MD0rHh42qIRlO3IxDaVmXLGB+2NvvXswF4YwF+HI7wTMHRUTXi4YWmeAto4pNu144t7FREkV03d+DBMKP4xZuY4Tttel8QKQhdGcpF93avBb9ArtTMzOuG+MQ/HEZiPOBFzcBBqMx3ztjDymnpBp2MwFnuhnuPISUKcSh04Bm5ju/bL+Ee0Q2CF2G2lLgjlj3TVFmka/FTMobl6v4H85qw==;31:Q3iqucoQ8DI+p60iIS3y+pwVN7O6yn1MottidYgo8LfjkQI8idbfA408wjYsyPx4hJk+pJNyqHjDzvJUluv/fQDWr+v6nn54DSKu1TEDLhBbbennHWDomyStVYYJjl5WzsjQuihOgrFUhLGDKUVvHp3fC7cqqUkfj7FR756hbHwslZe+7qzHYzyRQh4uJ6Dp1A/EvrmaXMLgFlvGAivZX70J8fAPMAIfew4Bb9b3Z4c= X-MS-TrafficTypeDiagnostic: DM5PR12MB1451: X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1451;20:6JcMbDDWZ1b7oHcWa5N77b5WxGb3YVU6wj9Zag70HSVb8qql+qRI2Di/vhDGNu5O4Eftezz0HoHH5JSgBjaMVNOoQ8qI9xdu8oIIKltQUjH31TVyg8mTJyyegYCncjQVm8vLuHvu+7QjOCAlJl7jlT19GM1Esb6TRwB9/mcmlg/ueyiMW31GoFEKSdlcBV+G1HssaCrPJRrHqWgJ3I9Q2of0qUsvTImoQXBFH+JCOfVjk/JvpZbXmYmtFqHZjtwUNGmS0i+wdFj4vJ9d55LNKutv/Pj0vdDUkAgh9asEat9qrje5y8N9QNqjrSsVaun3qe2Egkx7++RyLc2x9gNffpBlBX75zLp7xgvwqy6cC4eoZY+YUytBydx4YBpmhqwfZ6Kz2HkD8DqlQppljdoltJc15kRyv59VhaYsvDDwrqOWUQrWeD7ekEHSYzNmour5FYNY3f0MyLv4arGUuzOwoar1xKuIhXmy7V/nY6DJJOJ3lCbJnsJIOhAHsR5GK2jO;4:h4fzJtKTaEJ3ruWWSMeZ0MMsokdzw67HT2Xjdyu+Xcoeqfq2nH+iJhooVU1EzFvLb4upVEZJcdZoYX6kgyRGuDocoYdbzSnzKEfKFqtTS0m9r6RDT5YT1wuTznt0atFORy6a91n3ISJQhdQiA6OsbcFSPgm08SBNW/+n6AwFPxxtVNXL+WoiuK/vGolNMdD/U6aZAvv6Gw6PvhouTDNnZkTlue5L4faCt6iclEwlp9ogOzm2WMLjB/KakaGdDKgJMyvri5+MrHynJgPgteo9sj+CSRsm3tmDJjgtWJ+jMGP2uWdzHe8JBufaQBNUjnfpUzDIWKM2177bnwK0iPNMipCdLQ61wGtXbxpB8OGOpcQ= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(192374486261705)(767451399110); X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231254)(944501410)(52105095)(3002001)(93006095)(93001095)(10201501046)(6055026)(149027)(150027)(6041310)(20161123562045)(20161123558120)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011);SRVR:DM5PR12MB1451;BCL:0;PCL:0;RULEID:;SRVR:DM5PR12MB1451; X-Forefront-PRVS: 06691A4183 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(396003)(366004)(346002)(376002)(39380400002)(39860400002)(189003)(199004)(6666003)(86362001)(478600001)(7736002)(53416004)(2351001)(305945005)(2361001)(105586002)(2486003)(76176011)(25786009)(23676004)(106356001)(47776003)(66066001)(53936002)(575784001)(446003)(11346002)(476003)(55016002)(486006)(956004)(5660300001)(6916009)(72206003)(97736004)(4326008)(16526019)(186003)(58126008)(2906002)(26005)(316002)(8936002)(59450400001)(81156014)(7696005)(52116002)(8676002)(81166006)(68736007)(103116003)(6116002)(50466002)(3846002)(386003)(230700001);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR12MB1451;H:sosxen2.amd.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; Received-SPF: None (protection.outlook.com: amd.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtETTVQUjEyTUIxNDUxOzIzOk1XODM3UXN3bFQ1aFMwQTQ0cWdmWEE0TXA0?= =?utf-8?B?enYxa2FUUlRmbnJ1dnVyMGtCblo1TzRUWGhIdHJ1WkFVc2p4bjNuQTJGYjRv?= =?utf-8?B?aUtud1M5MXU3M1dCRXMzdzVRNFlxaXpjS2F5WFBhc1JlajNocVdiSGZGNnk4?= =?utf-8?B?Z2dyazBHcVRUOXUxMzBtL2lzY25oaWtoVTNaQlBWUmtKNm0xWEtaZkx4RjJF?= =?utf-8?B?UTJZMjBIdklBMnIrMmM4a1VWWHdmSGM5NXNudEV2NkNJYkNEdW9veHphQXZ4?= =?utf-8?B?SHNJemJjOTVEMlRLYXV0b1BwSUJZdnQzVmlkYjMzTUx5emN1TmdXMWx3ZkdL?= =?utf-8?B?ajcwMXdzemRrWFlqVWdPYVA1SkFveHFIMXNSOXFlZlVjOVIzZTMyNkFiaEJm?= =?utf-8?B?bnYzUys4dzZ0d3FwR3Irdkw0bFA4TEV3VDN1a1F4akpXbmkvT3ZQdlVFK29H?= =?utf-8?B?V2hLUUJYY0FHc1NhTVR6T0lPWDFReHliVS91Kzk0cnYvU2MrNEYwTVh6YWZG?= =?utf-8?B?R04yYmsrQk5EbXFMTFBLWmIrT3VBV0xiV1p1V0tXWk9lT3NWK29UejBhT0Z1?= =?utf-8?B?bk1nMU9yMm1kbkVwZ3FlYW1zd1dQNlNGa2FUTmdkdE12N2l4MFladkYrcWwr?= =?utf-8?B?Q2tmWGlGZnR5YWNEN1luMktnZmlybHAzT0ExZnQweUc3RVpld2x4cGhHcmtw?= =?utf-8?B?THo4bFc3a20vNU85T2ZQRDFpd2NaTDJyckNwTWtxZWVzd1JGYkFRTCs4a1Fj?= =?utf-8?B?dWZ4akZoWnRpYW9yVFVpc3hBM28wdC91MVFFcWJnakN2ZGFlZDd3MXgyc1Za?= =?utf-8?B?MFdISDhLRjdlZDBaajM3Nk5ZTkVhSHY0ZUhaY0IvNXY3bUZyNHBHa0JFdzdk?= =?utf-8?B?dnByOC9qMmMvSW81czVWREhGQlNQK3V3Z3FWNzZadmd3eUEzOFdaQmpuRjI3?= =?utf-8?B?YTZmY0czVWtJMW5URjVlNWc5RVJzVVV3enlUNS9IZWhXVFVUamZMN1B2MVho?= =?utf-8?B?aDlQcVdrVlVmaDZnMlhrZXNYUkE1TUhlU0FyRXd1c3hXdVhpdkpJYVY5UDBk?= =?utf-8?B?bURTajlUZ3NkYWhnOW82M09OUHM2YXk1b0lDWnBncmh3MXlZN3k2NEZjQzJ0?= =?utf-8?B?MVJWQWVQS05aZG5RRHVnQ3UxNE91NS9yTTk2UlFsUnNDY2lnblpLWmplNVB2?= =?utf-8?B?TUtQV2NhOVR3RVQzVE9taEo2SkdLYXdENGRnS2JyQmlpQzd6cnlmVGhBbjJW?= =?utf-8?B?WkR3N3QvQ3ZoSFgwNkt0M3RLbEc4QVQvZnVkNytwT3hia1ZiVE9yNmV4QWRi?= =?utf-8?B?bnd6NzBYem9rVjlLR3g2SWs0QmxNdEJlV25Fd3MzMmg5ZUFoMGxhWTV5SU1K?= =?utf-8?B?Ui9nbnF0d3FMQzBlZk0yMzVMVDVaV0ErZ0JZMzJlbEcvT0pDMVBNL1hBMHRz?= =?utf-8?B?a0NkbVN1aWp6ZTBYSUZOWllrek94YlV1eXR5bjhTNVU0SXRIT1BzNDFVU0pp?= =?utf-8?B?SEpWcElyTDNwY3J4Nk0zODQwMXorczVpNXhWSWdHSWZ2UDRCNjhIVm1MVFR4?= =?utf-8?B?VVpvYTZVa28zWnJlU09SRS9rdmk2UjA4a0dtaUJtYU02NEh2RFl4MjNRZHRo?= =?utf-8?B?M1NlN2hVQXdhQXhzbnkrMHVVOWgwTG5oM3VWM0lZM3daSlg1Q1ZLWWFKVTBn?= =?utf-8?Q?OI5lQdqNtMFEx6NPbCF/uP5cPOtoBukN5lv1+3C?= X-Microsoft-Antispam-Message-Info: AcWaCj6nqelwbQ6v5//+646o03s6CtYDdhFnGxF797WGK57Aqwl5X/mzoKLESaehVFmIUyluu+HY67UvaFvcw8PrNApELt20mUmZnSFZd8cxEaJq/58cMbq+XivG2xbXfvntoAWuM+Sfd0jjrAaehrZvMSgsMvYwE+eR6yJ5hYOuSgPjV+j8oXijoG5vGyvH X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1451;6:sOhKxDMfYrk4IFX14TgUa3tPG3f+k8IqKGryyUrCK42oznqyrOWv9goqvsU7vCK4b/bphDWO5GJMEbK/mqVTtAYTHoT5Xw3Q+cCtHwPCq/vFEsu8A02ZOpduooHr3otrmOspxiE7MP1AQwCY/xwYyF4JFjutVWT9mR47JNV0AUAtfqG4abTRFZeJZoi+SpPsT2Rn6xjaT5Ev4pGsQStIZroUrXv66gLdG9UXUatMm2vigDSm9g1R5Ww1gBvIoMpmR+3Y+Zh4TzHT9Z53M0bz0MBSgTVLEH3y3AWl7jCvQFiDkszi/Jdq1zhGK0USxMK/GOrVwBFbtT22FVR057rh0raYoxMepfgmb3zmulkpfPQLxLYL23IADVNwtW9two6D8+FZT7UHzXsjs7txcUHaMDG+cuIyX6RUJDsQreBa17VxBIMcQ6VuMnAwPR8b41CV7rAgx2Jdpr5ccfC3IiHSIQ==;5:Ww/fMDlBz+iHpVTVppSR8iCvUcfEH/wyRvWedLD9U2JQoa323x0fG10FbITv+EPgz7CVk8tHvpHW87ePmQsJmMf8Ydax1BP9aoWkLtbFZnSmS+X2DspIrScQVMXuL0mLX+0MqVfQSXshydTv72+tKBNwpXYIib6zylXNLYpsRXk=;24:Qgr5ggmiGkLm/destBxk6tzHjj5Ini6ioTEHC5RhT4qi+DXL3WxZkNfva29+snfht0oUyEhdpwCIFG7kscussDtpfyR0PEPK7HFefzPrOVI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DM5PR12MB1451;7:8nBXtDHy4vsXbYLBljVvywgfO7/rewuM2xhWBj66+s0xPb1B/CRqkNF4gfTaCP0Cn+/wH0/z19SLKbUMvlK0TtxPrg60FrgY/ecfVEQsT/jmuiOhCfD/q3c6jk+q/+BrRFLiYXR+ELZT/KvLbWp2VxkzYVxfSjwGwAGNgFkSXZ3lg0a/Aq34XaGuTyOzXHBISg8skV01qjE9fb4JXDesmbLkl2lOptIAgI/EzVkZ57SbNroeIt6/ZMESLT1/P1KB;20:tBTzES8JJXpSINpR4Ll30k6RDOJnkBxfrdWv93sH3wr16W8pnVzLYgF5d3GuXDqVqDeBmC+zAybA53XEhaElQJ3LtzR0FcvxNiSkmEz0aHRA79R2JDcKhmQ8qosIloULyI0SZMqHB25tfFF0SVB0tzd4LG0QxgScxV647rUcH+HAUdWMEfjVR8v99fsqxe7vnFZm1QjiUt11ZSRQC9CuyZP4jNOkZ1w0OnVPlNPZKTv25yGAZhoYIDCSp0VUZPWo X-MS-Office365-Filtering-Correlation-Id: bea04374-2edc-4919-b004-08d5b74c455d X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 May 2018 14:34:14.8677 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bea04374-2edc-4919-b004-08d5b74c455d X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR12MB1451 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Provide base enablement for using debugfs to expose internal data of an IOMMU driver. When called, create the /sys/kernel/debug/iommu directory. Emit a strong warning at boot time to indicate that this feature is enabled. This function is called from iommu_init, and creates the initial DebugFS directory. Drivers may then call iommu_debugfs_new_driver_dir() to instantiate a device-specific directory to expose internal data. It will return a pointer to the new dentry structure created in /sys/kernel/debug/iommu, or NULL in the event of a failure. Since the IOMMU driver can not be removed from the running system, there is no need for an "off" function. Signed-off-by: Gary R Hook --- drivers/iommu/Kconfig | 11 ++++++ drivers/iommu/Makefile | 1 + drivers/iommu/iommu-debugfs.c | 70 +++++++++++++++++++++++++++++++++++++++++ drivers/iommu/iommu.c | 2 + include/linux/iommu.h | 10 ++++++ 5 files changed, 94 insertions(+) create mode 100644 drivers/iommu/iommu-debugfs.c diff --git a/drivers/iommu/Kconfig b/drivers/iommu/Kconfig index f3a21343e636..ff511fa8ca7d 100644 --- a/drivers/iommu/Kconfig +++ b/drivers/iommu/Kconfig @@ -60,6 +60,17 @@ config IOMMU_IO_PGTABLE_ARMV7S_SELFTEST endmenu +config IOMMU_DEBUGFS + bool "Export IOMMU internals in DebugFS" + depends on DEBUG_FS + default n + help + Allows exposure of IOMMU device internals. This option enables + the use of debugfs by IOMMU drivers as required. Devices can, + at initialization time, cause the IOMMU code to create a top-level + debug/iommu directory, and then populate a subdirectory with + entries as required. + config IOMMU_IOVA tristate diff --git a/drivers/iommu/Makefile b/drivers/iommu/Makefile index 1fb695854809..74cfbc392862 100644 --- a/drivers/iommu/Makefile +++ b/drivers/iommu/Makefile @@ -2,6 +2,7 @@ obj-$(CONFIG_IOMMU_API) += iommu.o obj-$(CONFIG_IOMMU_API) += iommu-traces.o obj-$(CONFIG_IOMMU_API) += iommu-sysfs.o +obj-$(CONFIG_IOMMU_DEBUGFS) += iommu-debugfs.o obj-$(CONFIG_IOMMU_DMA) += dma-iommu.o obj-$(CONFIG_IOMMU_IO_PGTABLE) += io-pgtable.o obj-$(CONFIG_IOMMU_IO_PGTABLE_ARMV7S) += io-pgtable-arm-v7s.o diff --git a/drivers/iommu/iommu-debugfs.c b/drivers/iommu/iommu-debugfs.c new file mode 100644 index 000000000000..9df3b44aef55 --- /dev/null +++ b/drivers/iommu/iommu-debugfs.c @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * IOMMU driver + * + * Copyright (C) 2018 Advanced Micro Devices, Inc. + * + * Author: Gary R Hook + */ + +#include +#include +#include + +static struct dentry *iommu_debugfs_dir; + +/** + * iommu_debugfs_setup - create the top-level iommu directory in debugfs + * + * Provide base enablement for using debugfs to expose internal data of an + * IOMMU driver. When called, this function creates the + * /sys/kernel/debug/iommu directory. + * + * Emit a strong warning at boot time to indicate that this feature is + * enabled. + * + * This function is called from iommu_init; drivers may then call + * iommu_debugfs_new_driver_dir() to instantiate a vendor-specific + * directory to be used to expose internal data. + */ +void iommu_debugfs_setup(void) +{ + if (!iommu_debugfs_dir) { + iommu_debugfs_dir = debugfs_create_dir("iommu", NULL); + if (iommu_debugfs_dir) { + pr_warn("\n"); + pr_warn("*************************************************************\n"); + pr_warn("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n"); + pr_warn("** **\n"); + pr_warn("** IOMMU DebugFS SUPPORT HAS BEEN ENABLED IN THIS KERNEL **\n"); + pr_warn("** **\n"); + pr_warn("** This means that this kernel is built to expose internal **\n"); + pr_warn("** IOMMU data structures, which may compromise security on **\n"); + pr_warn("** your system. **\n"); + pr_warn("** **\n"); + pr_warn("** If you see this message and you are not debugging the **\n"); + pr_warn("** kernel, report this immediately to your vendor! **\n"); + pr_warn("** **\n"); + pr_warn("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **\n"); + pr_warn("*************************************************************\n"); + } + } +} + +/** + * iommu_debugfs_new_driver_dir - create a vendor directory under debugfs/iommu + * @vendor: name of the vendor-specific subdirectory to create + * + * This function is called by an IOMMU driver to create the top-level debugfs + * directory for that driver. The return value is the dentry for the requested + * vendor directory, or NULL in case of failure. + */ +struct dentry *iommu_debugfs_new_driver_dir(char *vendor) +{ + struct dentry *d_new; + + d_new = debugfs_create_dir(vendor, iommu_debugfs_dir); + + return d_new; +} +EXPORT_SYMBOL_GPL(iommu_debugfs_new_driver_dir); diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index d2aa23202bb9..350819f1c5e1 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -1747,6 +1747,8 @@ static int __init iommu_init(void) NULL, kernel_kobj); BUG_ON(!iommu_group_kset); + iommu_debugfs_setup(); + return 0; } core_initcall(iommu_init); diff --git a/include/linux/iommu.h b/include/linux/iommu.h index 19938ee6eb31..25018ac0fdab 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -698,4 +698,14 @@ const struct iommu_ops *iommu_ops_from_fwnode(struct fwnode_handle *fwnode) #endif /* CONFIG_IOMMU_API */ +#ifdef CONFIG_IOMMU_DEBUGFS +void iommu_debugfs_setup(void); +struct dentry *iommu_debugfs_new_driver_dir(char *vendor); +#else +static inline void iommu_debugfs_setup(void) {} +static inline struct dentry *iommu_debugfs_new_driver_dir(char *vendor) { \ + return NULL; \ +} +#endif + #endif /* __LINUX_IOMMU_H */