From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932672AbdBPPpK (ORCPT ); Thu, 16 Feb 2017 10:45:10 -0500 Received: from mail-co1nam03on0083.outbound.protection.outlook.com ([104.47.40.83]:15777 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932276AbdBPPpE (ORCPT ); Thu, 16 Feb 2017 10:45:04 -0500 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Thomas.Lendacky@amd.com; From: Tom Lendacky Subject: [RFC PATCH v4 12/28] efi: Add an EFI table address match function To: , , , , , , , , CC: Rik van Riel , Radim =?utf-8?b?S3LEjW3DocWZ?= , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , "Michael S. Tsirkin" , Joerg Roedel , Konrad Rzeszutek Wilk , Paolo Bonzini , Brijesh Singh , Ingo Molnar , Alexander Potapenko , Andy Lutomirski , "H. Peter Anvin" , Borislav Petkov , Andrey Ryabinin , Thomas Gleixner , Larry Woodman , Dmitry Vyukov Date: Thu, 16 Feb 2017 09:44:41 -0600 Message-ID: <20170216154441.19244.96367.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170216154158.19244.66630.stgit@tlendack-t1.amdoffice.net> References: <20170216154158.19244.66630.stgit@tlendack-t1.amdoffice.net> 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: YQXPR01CA0061.CANPRD01.PROD.OUTLOOK.COM (10.165.103.29) To BN6PR12MB1138.namprd12.prod.outlook.com (10.168.226.140) X-MS-Office365-Filtering-Correlation-Id: 520347a8-037c-4c3e-aa27-08d45682bd71 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081);SRVR:BN6PR12MB1138; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1138;3:/U9X91tHVyJAcNJpSsxA/w9fuTumCgT8qUTrk1H8DQDLpYrToXRUMr0uJ8oOFaaV1jcxvkn2SYjnQGL+Cn9pMo3+WEGVmEQddbEuLcYc61jF/mSFXI7taJMv0KymCqdO+5O36CdvG/u6GJ2L/OnfFn0996pX3MG+qKDTW5wuaigKPkDnvjQI9GDWDEUzWFWF/F1y8m7ClLOBWXWhNYmY478jpDzzMmn2LHQVi2Iue9Lu0/rt9MC/gka73Tcvji20DvaVXbVyvmumamW+ZvgQ6GctSrqVOzlVvbZyDbOgLIQ=;25:K2SFRrvEiWXeAMUTOK55rwFkBw9zoSLZQGE7pHL7UT2QqRMAkdaComj4tv+/YlSOrs26tOmv1UZtjdckTMymRGOVFR1fgSPIab0CdmCHKVYYKQoze08kd6NciwWKWw6Dl8eZ+YP059zXvUixunVYT7ucabuZ3bXQiNLq3BRhRRctzlG/ZHmP8elt5a0FKZGZNWcC29iXonxBNtPMudu2bccRC4gW+k6HeMaAjZj4yke7l0Z/ukuUQwYZrlRWtS1jlutDC9dgJS2CX1KyG0NmixY31ryXt5vbEhUKpJUdnveeHYCMdp0I4wz+aGqk7TURm0RQsTeLCAQSg7oDLSDeKf1bA5i0/sO23OMS6Xh065kZu5tOJX4Bz3PAcPXAcL1mtt0JS3k489v3jw3wg0PrVpHeNjGVCcHClzHRF7dHgkBJkIrgTi1w/TV/lDiavFdCJdWsn2Hh4uR9SeMYqss4IQ== X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1138;31:gS/BXPidCLU6141stk6UZvlLBlbTbXlMplxJNfqssaL3wRKZZAO9gJO01Y3cfqjK/29IO+G1wJ1nmENmB51O4SMjjZLviWjBERYgA9aeEm0FXQ8yj7M/rqHPrd8bBKBIEjPFLTMossDSrESkza4b2Kmm0vih79y4I7EvplOSkXp5bRnmkOYddjb9+XsfuumY0Hd46EFt0pISgv2So9XOOyLlXNK6TgJTsppECAi2sZU=;20:E7kMluj51cZrsd/PqWV0a27OErFP+O7rYIJ++sWOqDGkibV987ZAhvW1k52NcE+w3z+g18eERoujYaY5szutGRHAbJ5mExEaeyUwz82QyYnBjI7XYUn7YEwdFDOYCICRsTQXnZrDinIdEaAqcWErsGTrQeYNpT4ta7vyU1a30e9tbLp7j6wpL8C/F+lsHaGYSYmO2uQ2NXwtV/PMKBFPO7xado78qIXr+4hBIIbyRSqFEiOlYnT1fi1jkW5R8Bv53HcywsVUgYetW83cEbUS3CTf3eSRRmHHvk8T7jWAi+Cn+u2NZCXwAs90YgeQLbwJd7uIw29rZXEd0CM4SKqQuBaYdNkElzNoQiPSgP+SFao4musBWLil5DhgFdkS5oRUiuR7c16qbKpkNmawRNd3co54vmi8hQtWpUlMlIVeyjaTJdKy6eWlyDa4bTt5iH4ZEX8sV6tF0A/xqpwOdUKDZU7kuuf2WTkzPtgVY0skvjlL0DgwtWoqAugygL5H2krS 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)(20161123562025)(20161123564025)(20161123560025)(20161123555025)(20161123558025)(6072148);SRVR:BN6PR12MB1138;BCL:0;PCL:0;RULEID:;SRVR:BN6PR12MB1138; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1138;4:Nqr9mwqUvhiY37Cw6kp7fQp0tMWvLdi7ljGbOnzlDp5fJaeV4Rea7B97/94EM1ovXPzZFErZKnu3u+NvlxzV/umlzH8nYPl+Vr/Gdyj5cwyFNu68Z44Mpuxo/RiAYKAhg2vX0KBePjlGbXRhbWjyKVzBxcLuFIyefeLw4KVctw0Djv/83CHb/eGttwgrcXllPDIWBIJUvgENp20mwSFDANSAwTuNjYoiTr3DBEahzvB3as634nutNyNc/T+iYWcYDNvec2gs7ZEp89vcbkazY68ZJ4o6wh+ALgZvxGAyzXO3B//qT6JK8MQIDtBAFs5i3gzuiCWTM5c7Bp3sH5kLUvIX2Kzsn0OsVoWzr5jv2wTnfahV1Bc9Imzu+zt5XxlxAkrUdZ0jf3UBAkXdq0BAb41X2GJrmDjc1/50CauMEjywM3t05lRSjZ18BcvcQNAbvJTur65/E8aGD8i4Wn0MdSJYWG8BXx3eCTOcDyO+yrdoHWwew3TB4xqWaNrJCt6eiCfh5azVvdJwFEv+in0M0WO6T5l8HhKO5hTtS6czPwoPojr8ZfEjXMXMntO+BFhYxeJ8OmHdci/8g1TixyD213raReIrs2qFyBbW1xh4iijVgvph3jay46CenTo8z8kqSx2Cxcpj/fhCE0ROer5c3R0OXHImBs4PhV5q0aBf/hs= X-Forefront-PRVS: 0220D4B98D X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(7916002)(39860400002)(39450400003)(39840400002)(39410400002)(39850400002)(199003)(189002)(5660300001)(7736002)(305945005)(7416002)(33646002)(6666003)(101416001)(83506001)(42186005)(68736007)(23676002)(106356001)(2950100002)(69596002)(53416004)(389900003)(189998001)(50986999)(76176999)(54356999)(4001350100001)(105586002)(103116003)(97736004)(25786008)(2201001)(55016002)(81156014)(86362001)(66066001)(9686003)(1076002)(81166006)(6116002)(4326007)(2906002)(3846002)(8676002)(54906002)(47776003)(53936002)(50466002)(38730400002)(92566002)(6506006)(97746001)(230700001)(71626007)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR12MB1138;H:tlendack-t1.amdoffice.net;FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTjZQUjEyTUIxMTM4OzIzOmRhQUVUN2FFNVRPWUh3N2orY2V3M3l3S0lG?= =?utf-8?B?eTBodTlDYzNsaVhwSVZ4VUFvL0dodVpmeGFzZHpPOWEzdXlRbWV4NEVNelZx?= =?utf-8?B?QklGemZJakQwVnp1TDVqVnFrS1k2c2hSTEsyMEcxWnFXMEh5Z3gwbGJIQXIw?= =?utf-8?B?Wmg3ckQ3SEp4RXNSaXpSNWdJM0h0TTViU1FEbzMrRElmQ214N0hKMTFrK2xT?= =?utf-8?B?bDNXWUh1b1JFTllmWjViY2ZEbmF6UG5sYTZBOEt3TktvTGkyaVJwNzRNa2hl?= =?utf-8?B?RFU0a3FUaVNzaGlmUEdDTlhCdjNUdGc0L2lWM1NyaHVOVnJwdUt5ZTBoc3E4?= =?utf-8?B?NmM0WFBjSEcrM2NvRVFNUW56RHVyQ2g2V0dtem5aWjNKeFFDVVVyLzRnUU5p?= =?utf-8?B?NnU2ZUFkU3ZLQTVKcEpNcklrM0dyOEhKNUh5TWd4Unp6Sko5YlIzUlk3UzZ6?= =?utf-8?B?Q2c5TDdYdERrQVdreEVsTzlPNzFpQ3liMWcrc0Z4bUFzS3MvMXpscURCMy9C?= =?utf-8?B?ditDekx4TGpxZGxLdnVycHVyYmpJK3grTjkrSml1b3ptKzBMcms1R0UvRlNG?= =?utf-8?B?SXRQWjFTRUZZcHBBaWpha0Z4YXpadk05dmhROTlFalRqQkFBYzNLWmZhMVlJ?= =?utf-8?B?NGpaM25TSE14SEZNdE5VcGFmVm9uWE5iUUhqYU1Jbk9vVWdpZWhCSXAzU0kw?= =?utf-8?B?dVpMY01iNlI0YUxKeE5UMWYreFFQTjVRamFCZUwzS1F2T21ZeHVKMVl3TW9E?= =?utf-8?B?Z1VtZ3RFcUFiSG1JZnZaNittRElSZjlYRFBnL3Z1SFIyK2VIY1UwT1RlYnNZ?= =?utf-8?B?V0tMOTV0TFp1MWRGK3I5UGNsQitLYWZjZ0o2ZXZ5NEpQRGNncVQyUFFKWU1O?= =?utf-8?B?RWZ4Q3JBNm00VTJxd3owR3ZtazdXekhrVjJrMGxsMk1FQ1pnNjM2QVZ0SVJL?= =?utf-8?B?M0lUMGJHdWRic1g5Wnc1WHEyTmhUekRkc1hGWUh5RmdHR3ROWVFwQi9Ia1Zh?= =?utf-8?B?bmRLaW9WN2Joc2kzOVZ1dW0vV3l6MkRWc3ZvTjJZZzMweHR0QVMvV2ZncTNI?= =?utf-8?B?L2UwaC93VmFhR1Z5a3U1c2RmR05aaDZiRkRBMmxONEJwYUtoVTRjMHhxNkIr?= =?utf-8?B?M2NTenBmdW4ycHM4RStNZklFVlgwRUpjYjh0emlPRGo5L1F0MTJxenQ5WFM2?= =?utf-8?B?M0lQRzJoeFRzRkFBcFkvVktodjN4LzFQbXN1Sm1LeTFFOUdpQWxQeEwrOUlY?= =?utf-8?B?S1dldVZkbGszM2JuQVNjd1Ftam8wWjlSbk5UVE9aSkFVY0o5QWVtRjNTSVVM?= =?utf-8?B?cG5SalBoYnVzdTd4TFVFajgxakdNUHNGWXZ0QS96REJMdFM2TlpOVDVHME1R?= =?utf-8?B?RWRXbUl4aWdLQ21RUWJ0U25PYXhkQlJMMXpPeVFINEdYOEwrRGEwNHVKeXBh?= =?utf-8?B?b29kVHVMQkI0eWFpRWcrN3RYQ21jdGRqSDVSdEdyTllWd2N2WTN3R1N0OEEz?= =?utf-8?B?UE9FbjJMa1AvWVordlZnUm9qejhlREFrc1hTOWhlMGJWdzV2bVdrd2dFaXl4?= =?utf-8?B?SExlWkhQRmozZ200TDlTN1gzZTJtbVhJaTFWVUxRamV3anVhNGlBYnllTEdx?= =?utf-8?B?MzR2dW8rVzVxUVdlOFdkK1ZuSFpLNEVZRmVTZ25oaFlKYk9YY2xSQU1TUkZM?= =?utf-8?B?c09vZEROaERrUW9pdHh1eFUrTHFPYkplVzArcXVMYjBBYWp0Wm1VYnh4d1Qy?= =?utf-8?B?bDU3cVUrOVJuUFFjdWIwWVJlN0FuNis1d3BiRHBEUVNzMmJtMWUvYTYwL1Y5?= =?utf-8?B?emhPOWZaelp4T3BPaXBIelFyVUlJNVpySHBtT3k3OTRHOUZjRkRRV3RydXFZ?= =?utf-8?B?dHNXcWpOYXh2MkJOUTdLa05tTk5aazFXOGxkZVZDeUZPRUxTLzJiNS83eFdz?= =?utf-8?B?eXdnaVNqMU9BPT0=?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1138;6:243Jk9Z7PWFXzKu0PDcQvTeelHWqlDTjCo7BJK0r6PdtBLWbqmNlW2N/cB2tlQd3Jzo1Dx9CkgELvOPjUzPxrRFCUHkrleyV1yAxiWyULj2MleB4jpaKeP4TYNdGTF+pnROtwfquAUsFfDeNn0eJcSnf1feZMFpjErG1/wZKoR9ChYXE2o+GFtoyxsO3nJm2d5kbN4kAcDl7QUrZodqbfq/Uqyo8nDtLL1PUWqCqJdKIPyBviT+eB12JStfWJtJ7bLYaXc0S4TdBcupGtjF7a1Yt+lIrBcId1/Z4XL0f/qD7uti/j1Q6szC35628+V+mG8seJQTzg+qgKLkHN1ataFpEXhE/sYGDUdPXj5q3X/i01y0/nRwv4/+3dLFzWArkzLGeOJ3Z0JOjxRCqSwRLDHW6UrvZmXEFqmXbgORgDLk=;5:/1TQ3G3KG4BppulYX1ZWOAW94JTtEr2weH6Kjqd26/WLr56LBRY71gQt7rv/v3BLZTEIJ2dtS2//reyAcBYQfhlBc88nEdx/FQiN/s00QU7kLMQuxgebJW0htsFv4HiTHUp/i5e20Np0tbTEMLRHnQ==;24:tLe5VOUsXTMMdfSishS7hOla26FdDUYf3GCRTYMCI7/QB3FNXlK2AY0p8A+gRWnAaL+kOTh40Wy+GyIAFtrF98a076iwTg+W6UbSR/vCIL4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1138;7:ZJXcAjxKdR2HOBDMPf26z+ls+Q9URzr9idI0K8za9I9JSCgXIcVcxKnvpVFmQdgwbzsNhA+MSjDpPJEIDUXTt3bMuAnhxMUYbyCZXykIYDJPVkNKZKemlaLMh2WsMnP8OIztwbo7TnROnviVZAFdRiVKXf3XaVMcYTuHBgJ5Y9umbP8iMhpxhhN9mWBCrYV+Amh9it2H0VMe1+Fj8lEo+Ip2QLKA0wPvE5hwXgY7ULmwiVhByEl8RC1Sv5SOjFU2/cPhqHN9YHSJlNRsXZhRYe5Q2UwqoZhVl0/aKrJnXwwE795eX+L8ekzxDmHOtLIurHI0COXj69g8yVYtaxKd0A==;20:26r7+3snxIagpbsOyhpwYH+MVw/1VoXgJXF1QFD2z38XzCfmbcg2PxaVK+V+Qv2jWsQ3ur7LRof8zdk2yo/At9cQLw0Qo93KGKy26cAKj+L4oYUuqWWoVzMBPPC+J+u03OIVZA+vg3NO20HHZY/HB/2GI9R03mBKkPg7hPxed2Nppraep/IHYGnv9C+Mhdm5ciYGeczTOOLOnGJZ3hX9h5ZVMWhcsl7mfgJADYb49StI3ciD5djNxdWWRcxu8oiA X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Feb 2017 15:44:45.9877 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1138 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds support that will determine if a supplied physical address matches the address of an EFI table. Signed-off-by: Tom Lendacky --- drivers/firmware/efi/efi.c | 33 +++++++++++++++++++++++++++++++++ include/linux/efi.h | 7 +++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index e7d4040..e8dbcdf 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -55,6 +55,25 @@ struct efi __read_mostly efi = { }; EXPORT_SYMBOL(efi); +static unsigned long *efi_tables[] = { + &efi.mps, + &efi.acpi, + &efi.acpi20, + &efi.smbios, + &efi.smbios3, + &efi.sal_systab, + &efi.boot_info, + &efi.hcdp, + &efi.uga, + &efi.uv_systab, + &efi.fw_vendor, + &efi.runtime, + &efi.config_table, + &efi.esrt, + &efi.properties_table, + &efi.mem_attr_table, +}; + static bool disable_runtime; static int __init setup_noefi(char *arg) { @@ -855,6 +874,20 @@ int efi_status_to_err(efi_status_t status) return err; } +bool efi_table_address_match(unsigned long phys_addr) +{ + unsigned int i; + + if (phys_addr == EFI_INVALID_TABLE_ADDR) + return false; + + for (i = 0; i < ARRAY_SIZE(efi_tables); i++) + if (*(efi_tables[i]) == phys_addr) + return true; + + return false; +} + #ifdef CONFIG_KEXEC static int update_efi_random_seed(struct notifier_block *nb, unsigned long code, void *unused) diff --git a/include/linux/efi.h b/include/linux/efi.h index 94d34e0..7694b23 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1079,6 +1079,8 @@ static inline bool efi_enabled(int feature) return test_bit(feature, &efi.flags) != 0; } extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); + +extern bool efi_table_address_match(unsigned long phys_addr); #else static inline bool efi_enabled(int feature) { @@ -1092,6 +1094,11 @@ static inline bool efi_enabled(int feature) { return false; } + +static inline bool efi_table_address_match(unsigned long phys_addr) +{ + return false; +} #endif extern int efi_status_to_err(efi_status_t status); From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Lendacky Subject: [RFC PATCH v4 12/28] efi: Add an EFI table address match function Date: Thu, 16 Feb 2017 09:44:41 -0600 Message-ID: <20170216154441.19244.96367.stgit@tlendack-t1.amdoffice.net> References: <20170216154158.19244.66630.stgit@tlendack-t1.amdoffice.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20170216154158.19244.66630.stgit-qCXWGYdRb2BnqfbPTmsdiZQ+2ll4COg0XqFh9Ls21Oc@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: linux-arch-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kasan-dev-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Cc: Rik van Riel , Larry Woodman , Brijesh Singh , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , Radim =?utf-8?b?S3LEjW3DocWZ?= , Andrey Ryabinin , Ingo Molnar , "Michael S. Tsirkin" , Andy Lutomirski , "H. Peter Anvin" , Borislav Petkov , Paolo Bonzini , Alexander Potapenko , Thomas Gleixner , Dmitry Vyukov List-Id: linux-efi@vger.kernel.org This patch adds support that will determine if a supplied physical address matches the address of an EFI table. Signed-off-by: Tom Lendacky --- drivers/firmware/efi/efi.c | 33 +++++++++++++++++++++++++++++++++ include/linux/efi.h | 7 +++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index e7d4040..e8dbcdf 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -55,6 +55,25 @@ struct efi __read_mostly efi = { }; EXPORT_SYMBOL(efi); +static unsigned long *efi_tables[] = { + &efi.mps, + &efi.acpi, + &efi.acpi20, + &efi.smbios, + &efi.smbios3, + &efi.sal_systab, + &efi.boot_info, + &efi.hcdp, + &efi.uga, + &efi.uv_systab, + &efi.fw_vendor, + &efi.runtime, + &efi.config_table, + &efi.esrt, + &efi.properties_table, + &efi.mem_attr_table, +}; + static bool disable_runtime; static int __init setup_noefi(char *arg) { @@ -855,6 +874,20 @@ int efi_status_to_err(efi_status_t status) return err; } +bool efi_table_address_match(unsigned long phys_addr) +{ + unsigned int i; + + if (phys_addr == EFI_INVALID_TABLE_ADDR) + return false; + + for (i = 0; i < ARRAY_SIZE(efi_tables); i++) + if (*(efi_tables[i]) == phys_addr) + return true; + + return false; +} + #ifdef CONFIG_KEXEC static int update_efi_random_seed(struct notifier_block *nb, unsigned long code, void *unused) diff --git a/include/linux/efi.h b/include/linux/efi.h index 94d34e0..7694b23 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1079,6 +1079,8 @@ static inline bool efi_enabled(int feature) return test_bit(feature, &efi.flags) != 0; } extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); + +extern bool efi_table_address_match(unsigned long phys_addr); #else static inline bool efi_enabled(int feature) { @@ -1092,6 +1094,11 @@ static inline bool efi_enabled(int feature) { return false; } + +static inline bool efi_table_address_match(unsigned long phys_addr) +{ + return false; +} #endif extern int efi_status_to_err(efi_status_t status); From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-co1nam03on0083.outbound.protection.outlook.com ([104.47.40.83]:15777 "EHLO NAM03-CO1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932276AbdBPPpE (ORCPT ); Thu, 16 Feb 2017 10:45:04 -0500 From: Tom Lendacky Subject: [RFC PATCH v4 12/28] efi: Add an EFI table address match function Date: Thu, 16 Feb 2017 09:44:41 -0600 Message-ID: <20170216154441.19244.96367.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170216154158.19244.66630.stgit@tlendack-t1.amdoffice.net> References: <20170216154158.19244.66630.stgit@tlendack-t1.amdoffice.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: linux-arch-owner@vger.kernel.org List-ID: To: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, iommu@lists.linux-foundation.org Cc: Rik van Riel , Radim =?utf-8?b?S3LEjW3DocWZ?= , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , "Michael S. Tsirkin" , Joerg Roedel , Konrad Rzeszutek Wilk , Paolo Bonzini , Brijesh Singh , Ingo Molnar , Alexander Potapenko , Andy Lutomirski , "H. Peter Anvin" , Borislav Petkov , Andrey Ryabinin , Thomas Gleixner , Larry Woodman , Dmitry Vyukov Message-ID: <20170216154441.YV_qsJ9pJxMuMxl1LgXJt3PBDhZ9DEVFbh0-fidwEbE@z> This patch adds support that will determine if a supplied physical address matches the address of an EFI table. Signed-off-by: Tom Lendacky --- drivers/firmware/efi/efi.c | 33 +++++++++++++++++++++++++++++++++ include/linux/efi.h | 7 +++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index e7d4040..e8dbcdf 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -55,6 +55,25 @@ struct efi __read_mostly efi = { }; EXPORT_SYMBOL(efi); +static unsigned long *efi_tables[] = { + &efi.mps, + &efi.acpi, + &efi.acpi20, + &efi.smbios, + &efi.smbios3, + &efi.sal_systab, + &efi.boot_info, + &efi.hcdp, + &efi.uga, + &efi.uv_systab, + &efi.fw_vendor, + &efi.runtime, + &efi.config_table, + &efi.esrt, + &efi.properties_table, + &efi.mem_attr_table, +}; + static bool disable_runtime; static int __init setup_noefi(char *arg) { @@ -855,6 +874,20 @@ int efi_status_to_err(efi_status_t status) return err; } +bool efi_table_address_match(unsigned long phys_addr) +{ + unsigned int i; + + if (phys_addr == EFI_INVALID_TABLE_ADDR) + return false; + + for (i = 0; i < ARRAY_SIZE(efi_tables); i++) + if (*(efi_tables[i]) == phys_addr) + return true; + + return false; +} + #ifdef CONFIG_KEXEC static int update_efi_random_seed(struct notifier_block *nb, unsigned long code, void *unused) diff --git a/include/linux/efi.h b/include/linux/efi.h index 94d34e0..7694b23 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1079,6 +1079,8 @@ static inline bool efi_enabled(int feature) return test_bit(feature, &efi.flags) != 0; } extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); + +extern bool efi_table_address_match(unsigned long phys_addr); #else static inline bool efi_enabled(int feature) { @@ -1092,6 +1094,11 @@ static inline bool efi_enabled(int feature) { return false; } + +static inline bool efi_table_address_match(unsigned long phys_addr) +{ + return false; +} #endif extern int efi_status_to_err(efi_status_t status); From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Lendacky Subject: [RFC PATCH v4 12/28] efi: Add an EFI table address match function Date: Thu, 16 Feb 2017 09:44:41 -0600 Message-ID: <20170216154441.19244.96367.stgit@tlendack-t1.amdoffice.net> References: <20170216154158.19244.66630.stgit@tlendack-t1.amdoffice.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: Rik van Riel , Larry Woodman , Brijesh Singh , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , Radim =?utf-8?b?S3LEjW3DocWZ?= , Andrey Ryabinin , Ingo Molnar , "Michael S. Tsirkin" , Andy Lutomirski , "H. Peter Anvin" , Borislav Petkov , Paolo Bonzini , Alexander Potapenko , Thomas Gleixner , Dmitry Vyukov To: , , , , , , , , Return-path: In-Reply-To: <20170216154158.19244.66630.stgit-qCXWGYdRb2BnqfbPTmsdiZQ+2ll4COg0XqFh9Ls21Oc@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org List-Id: kvm.vger.kernel.org This patch adds support that will determine if a supplied physical address matches the address of an EFI table. Signed-off-by: Tom Lendacky --- drivers/firmware/efi/efi.c | 33 +++++++++++++++++++++++++++++++++ include/linux/efi.h | 7 +++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index e7d4040..e8dbcdf 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -55,6 +55,25 @@ struct efi __read_mostly efi = { }; EXPORT_SYMBOL(efi); +static unsigned long *efi_tables[] = { + &efi.mps, + &efi.acpi, + &efi.acpi20, + &efi.smbios, + &efi.smbios3, + &efi.sal_systab, + &efi.boot_info, + &efi.hcdp, + &efi.uga, + &efi.uv_systab, + &efi.fw_vendor, + &efi.runtime, + &efi.config_table, + &efi.esrt, + &efi.properties_table, + &efi.mem_attr_table, +}; + static bool disable_runtime; static int __init setup_noefi(char *arg) { @@ -855,6 +874,20 @@ int efi_status_to_err(efi_status_t status) return err; } +bool efi_table_address_match(unsigned long phys_addr) +{ + unsigned int i; + + if (phys_addr == EFI_INVALID_TABLE_ADDR) + return false; + + for (i = 0; i < ARRAY_SIZE(efi_tables); i++) + if (*(efi_tables[i]) == phys_addr) + return true; + + return false; +} + #ifdef CONFIG_KEXEC static int update_efi_random_seed(struct notifier_block *nb, unsigned long code, void *unused) diff --git a/include/linux/efi.h b/include/linux/efi.h index 94d34e0..7694b23 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1079,6 +1079,8 @@ static inline bool efi_enabled(int feature) return test_bit(feature, &efi.flags) != 0; } extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); + +extern bool efi_table_address_match(unsigned long phys_addr); #else static inline bool efi_enabled(int feature) { @@ -1092,6 +1094,11 @@ static inline bool efi_enabled(int feature) { return false; } + +static inline bool efi_table_address_match(unsigned long phys_addr) +{ + return false; +} #endif extern int efi_status_to_err(efi_status_t status); From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f200.google.com (mail-pf0-f200.google.com [209.85.192.200]) by kanga.kvack.org (Postfix) with ESMTP id 2C4FF680FFB for ; Thu, 16 Feb 2017 10:44:54 -0500 (EST) Received: by mail-pf0-f200.google.com with SMTP id 201so27005971pfw.5 for ; Thu, 16 Feb 2017 07:44:54 -0800 (PST) Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0059.outbound.protection.outlook.com. [104.47.40.59]) by mx.google.com with ESMTPS id z4si7250701pge.359.2017.02.16.07.44.53 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 16 Feb 2017 07:44:53 -0800 (PST) From: Tom Lendacky Subject: [RFC PATCH v4 12/28] efi: Add an EFI table address match function Date: Thu, 16 Feb 2017 09:44:41 -0600 Message-ID: <20170216154441.19244.96367.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170216154158.19244.66630.stgit@tlendack-t1.amdoffice.net> References: <20170216154158.19244.66630.stgit@tlendack-t1.amdoffice.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, iommu@lists.linux-foundation.org Cc: Rik van Riel , Radim =?utf-8?b?S3LEjW3DocWZ?= , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , "Michael S. Tsirkin" , Joerg Roedel , Konrad Rzeszutek Wilk , Paolo Bonzini , Brijesh Singh , Ingo Molnar , Alexander Potapenko , Andy Lutomirski , "H. Peter Anvin" , Borislav Petkov , Andrey Ryabinin , Thomas Gleixner , Larry Woodman , Dmitry Vyukov This patch adds support that will determine if a supplied physical address matches the address of an EFI table. Signed-off-by: Tom Lendacky --- drivers/firmware/efi/efi.c | 33 +++++++++++++++++++++++++++++++++ include/linux/efi.h | 7 +++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index e7d4040..e8dbcdf 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -55,6 +55,25 @@ struct efi __read_mostly efi = { }; EXPORT_SYMBOL(efi); +static unsigned long *efi_tables[] = { + &efi.mps, + &efi.acpi, + &efi.acpi20, + &efi.smbios, + &efi.smbios3, + &efi.sal_systab, + &efi.boot_info, + &efi.hcdp, + &efi.uga, + &efi.uv_systab, + &efi.fw_vendor, + &efi.runtime, + &efi.config_table, + &efi.esrt, + &efi.properties_table, + &efi.mem_attr_table, +}; + static bool disable_runtime; static int __init setup_noefi(char *arg) { @@ -855,6 +874,20 @@ int efi_status_to_err(efi_status_t status) return err; } +bool efi_table_address_match(unsigned long phys_addr) +{ + unsigned int i; + + if (phys_addr == EFI_INVALID_TABLE_ADDR) + return false; + + for (i = 0; i < ARRAY_SIZE(efi_tables); i++) + if (*(efi_tables[i]) == phys_addr) + return true; + + return false; +} + #ifdef CONFIG_KEXEC static int update_efi_random_seed(struct notifier_block *nb, unsigned long code, void *unused) diff --git a/include/linux/efi.h b/include/linux/efi.h index 94d34e0..7694b23 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1079,6 +1079,8 @@ static inline bool efi_enabled(int feature) return test_bit(feature, &efi.flags) != 0; } extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused); + +extern bool efi_table_address_match(unsigned long phys_addr); #else static inline bool efi_enabled(int feature) { @@ -1092,6 +1094,11 @@ static inline bool efi_enabled(int feature) { return false; } + +static inline bool efi_table_address_match(unsigned long phys_addr) +{ + return false; +} #endif extern int efi_status_to_err(efi_status_t status); -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org