From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932852AbdDRVUq (ORCPT ); Tue, 18 Apr 2017 17:20:46 -0400 Received: from mail-bn3nam01on0058.outbound.protection.outlook.com ([104.47.33.58]:47712 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1758085AbdDRVUj (ORCPT ); Tue, 18 Apr 2017 17:20:39 -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: Tom Lendacky Subject: [PATCH v5 23/32] swiotlb: Add warnings for use of bounce buffers with SME 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 , Larry Woodman , Brijesh Singh , Ingo Molnar , Borislav Petkov , Andy Lutomirski , "H. Peter Anvin" , Andrey Ryabinin , Alexander Potapenko , Dave Young , Thomas Gleixner , Dmitry Vyukov Date: Tue, 18 Apr 2017 16:20:19 -0500 Message-ID: <20170418212019.10190.24034.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170418211612.10190.82788.stgit@tlendack-t1.amdoffice.net> References: <20170418211612.10190.82788.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: BN6PR03CA0059.namprd03.prod.outlook.com (10.173.137.21) To BN6PR12MB1137.namprd12.prod.outlook.com (10.168.226.139) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 19339766-2532-4bc8-9217-08d486a0ba89 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081)(201703131423075)(201703031133081);SRVR:BN6PR12MB1137; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1137;3:CW8AI8I5LPn2ocqXH1wvzmQdgeciLGJ5q4Hnqedmuq3CM/masgj2sgZL5aieFF4uV9t5FgX3/9vC+P6JujPk7CTh08L6kSnUvYyiKk1fEvmjviD8zzCfAmht/hwQoAGgf8RX4GrMKaEIplINVVRZHxSJ82wVyxbi8Dnc6KYmcm5I1hngsqb3mCkZFDkcKRS0R2hRZgogfDDSigq9bj4nzUCdBSpGKmfBkzeN+PctKlA43HTtLSq5G0v0SnMV7wYk8O/CertpH0L4g4avLyk6VbzIJEN/qVuxn2+x5c6YuCFzd7w5trsxSFHH/aWLOyZnByAvMZ6CdTXBVwrBrk8P0SbCYRmYput+8b4YrNs6yas=;25:qZkBMTZVZ6Epjm28cQixKJS6Cx6put1iKev3Y01jZBJxw/VrmdbJLg9uaeuFzVc2LdjRfZ+FUTEftUY2J7+rXm8aczQOf+nPc7SP1O5Ewt7Xs18BVOXz20n5NMjBil8+4xNZyD8LO1wtTOOM5GAQDYaSanTxAF0B/+Wsia6+UbFZETY8KPdFD2Rs7TpBC22+1wB8fr59+CyP8dmdYf81VnS7Dmad7CDj6+nbJzscyXhCFMG6KuAm6eSiYMQAGiwFr93PL2duRfYFairjQ0rwYYJqunF9A0edhshKEwTIZIly1wQj6BTAKU+Z0OlZAcm5cUlYdEn6oTBLd57CrkdmHFtO6bmBirGSss+kUZvXe2Og9QUc30yx2ip0TKfv5v91wDcH7yDwiO3VqDWkuam0ra22f8fIoUOhtu2asFflKBvoyUezXjSP97n9fPo1ASJMznNh1EYgsuo+VLX1ouhsSA== X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1137;31:r/rn2Ey1xeHoTEVaB5obovWTQK7M/DgEICujIGwwbJ73yRBtBEG1q16fPaDar7ZLVvXAewlM1XqGE6BvLIySx9JrNBzGtYMgmw1T9Dgzm7BLiCTEhaZP6woQ0baMLK2ShcyV7KYxODeUJkjyUrgoqJf08DP5To/uWoUuazhuzuMFTnszAggCg4wQe/Yv8BZLdQXzpRAHmKLOD+HaSW+EvDDMf0bByvlXcMNsCmQd0IE=;20:ESwKxOksaN1lSHazzitnLq6yvaPU32W3fUfQf+WuM4lkLPrRIs6lQMrx0jfYs5imw42F7M+e6jr0atQ7PYBjvZUeDosucJbDs+kJWOSkKsYPsqoLV1rGmLd4vMxpwHjc5UCb8K9VLCeuPAS2a2d5/6i3bJQv4nk9nr42WQ+m/eGeXBhpTRJs7TYASEEnOngcDoZF7Tgal39rlHTb+TLiT0VMbrR9ISyCxhqTUtZQCpOxb8j5DURvdHlBpwpEWK8CB7DIDbkzG0DtqH2N9SWz4vaJppKXHieeMnEIgvwprNr/GJF4DJYqBJ0uizLbtV/zb4VpF7VKzkUdumdHK0hvLvXW3MkfY8yWeJY3s7gSyI6fhx1O3/p9O6CXSqHfD8JA2zD4osjShEjhk/9oHe9mLeeESIK9Yz4o6yb8DEyrrtS/N7d/YiGcWuux+o350JDt0DmpuxmgBcgv6liMIJ05Yynp1x9HoO0Ghz2NJOyA4BrFxsTWN38NLBGxTtDx+lu3 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(6055026)(6041248)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(20161123560025)(20161123555025)(20161123564025)(6072148);SRVR:BN6PR12MB1137;BCL:0;PCL:0;RULEID:;SRVR:BN6PR12MB1137; X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1137;4:SMxzs8YNpwPYpiIRvaR+avSYZt4Tv9LeVswKptkHp6eRRc82CaJaRhgWOQVSaLak+jyprey7SkDBH0TvSW2zfT7byaDJXCBfMMzV4xPtcAnkowI4NL+tQBP13G3BkZtu2S6cXDAGw5qzIS0qpsdL5fwSs8O5dHwFVjquA/AI+YK45yELcYwsvsIytO1j8k6zCwUcNc1KiKHOYvP1ujGDThn/igZppZK8u2Uq4NUente7vdFtDsU0EoQ0wXMfxFlkBneCdq17recNdjeTqLDEBadd8uxVim0hZpZOpZYRhm9zzcHmI2/k7pLruaSakdGJRkXlWyCSLXqR+oqDLPqGBZdAZmISRfYUS+UtUiDB7tHTQ3DdXIVq+yJrrGvSUa7GIiEuuzuzETQ2oEbx0wJQx8/3q1OKkaJgki5XPFPCti1K1dFJIVivNluUPyTporLhYJeGMlrHmh6JEtC+Tbm8Nxcq3M1yeOc5EjUHPKrtjlPtGdLzYzTpCptBHfUwgtDhv/+kgdgdvBj9pFIcZSroBhOTQeexIa9C2gWAZSarUsVyCmfUNtIPG4wTpaBEpT+l/AUU1arvGb2k5sZDBJ6ym7eI+cP+uPUdgTFeYS8UWwpitjoLhsFOPzKosC8hB0k7ujb+Y+/HRaeS0l3LFcKdRQ57KdQTScHzQExJcZ0cE2b30NhH6nU08lG6bacbMaeObMMWsNUd3n0W3o3SbjIqxgskwN1rzzvNit1nrhgQzU2YTcFgtPX/Ykbxw55b3lOk8TbjYfRiWfJbn1HXQ+wb+A== X-Forefront-PRVS: 028166BF91 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39840400002)(39850400002)(39400400002)(39410400002)(39860400002)(39450400003)(7736002)(7406005)(2201001)(6506006)(7416002)(23676002)(53936002)(86362001)(54906002)(5660300001)(9686003)(83506001)(305945005)(81166006)(8676002)(55016002)(42186005)(2950100002)(53416004)(230700001)(50986999)(6666003)(1076002)(76176999)(103116003)(6116002)(33646002)(97746001)(3846002)(25786009)(47776003)(4001350100001)(50466002)(38730400002)(66066001)(54356999)(2906002)(189998001)(4326008)(921003)(71626007)(1121003)(309714004);DIR:OUT;SFP:1101;SCL:1;SRVR:BN6PR12MB1137;H:tlendack-t1.amdoffice.net;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTjZQUjEyTUIxMTM3OzIzOlprMW5ISnpON0NaOUkrVklGZTZxbDRIdldS?= =?utf-8?B?Y1hpQ0VTTy9mU0Rsc3BzZHBQZ2xyRS9WeCsvYzBXV3FyWHhDQVcrV0NtWm9V?= =?utf-8?B?OTlRK3V6Qk1tUHhDY3hQNTRhM2d2UnVNUUx2Q2wwL0YvY0tTbzRYWG5VOTky?= =?utf-8?B?YW56bmNpdUtnQ1F5VjNXMDFIRkpGVEJrZ2JtNmVNVFYwaEJFN3pCMzgzaDBk?= =?utf-8?B?Vm9ZWHlZMVZQQW5WMkpDdUczQ09TQzNKVlg0VVZvNHI1RHBEV2J0SkxwSDJV?= =?utf-8?B?R1pLZ21yc0NneGhPQUdoNU9iNDc5R3BKRVBkaUl1MnVUeFhQMHJaWUlvMEpZ?= =?utf-8?B?eTdaTG5XRlVQVlFGR012aC9QRkNycGVxL2RGbE1xMVM3NUsvMmZNcVRuZU1F?= =?utf-8?B?MU1iajcvSHV5VmtITWt3RW1hdFNmVXE5U2xPRHZCVzBOcWUxOVJqSFVhWHNw?= =?utf-8?B?WEh0ZVVtYWlhb2ZnKzNPdUpEZC81amM0QnVoMitaL0JEcXFjdDFQQSs1Mmcv?= =?utf-8?B?Y0ZJemJTdWdKVFJtNlFxdVF3SDg2aEp3bTh6bWp4UEUycm9sb09hU2Nzd2x3?= =?utf-8?B?ZUpENW81SzlZakRhZGJ6WEVKZG5GTnloRm1xUWpuSzJ0cWpGU2NIeU1xWlhP?= =?utf-8?B?R2xxcE0yalpNOUhGOTJ1TDhWR1ZXQkYvNm05WWt2QngzckpHZjRIM2pJY3lG?= =?utf-8?B?WVNBeHA4Szd2dG5Dclh0QU1jNWdZRFhEWlFLOXVkZlBVRjlEbVBVWkthWTFD?= =?utf-8?B?WFMxZ1BLVlV4aWErZGZVNDVYNi9UK3ZYRFJ0RE9DdE5NTlBHOG0vK0J4S0FP?= =?utf-8?B?UituVTBndGVQNWZuQy9sUzNsb1hSbWVMQlBsdmFZZVE5UFpYRWhnNGZ0bUhz?= =?utf-8?B?aUdkQkI1Q3UwVTQ3Q1RiT1JZU2RCd0pBQmMyUzRaelltMjJnN0JuUFJzd1JK?= =?utf-8?B?cmVTOVExdllJSDdVcXVnUHVDTkp1dklpVGNCN0p4NFBXb3RFSUdYTWRmUlAy?= =?utf-8?B?OHNrektvR1d1cjIxdURSa0hSVjBxRmVMcU42VDlHTXRWYVJuaUxDMzNtRzNB?= =?utf-8?B?WnMvQndKOWJTNjRiaTJaQXdZMUJwNndmQWx4RnY2c3JHeTlnYWk3V0FGTW5Z?= =?utf-8?B?bFB5SUF3WlBrbzF2UDliaFlXaXNLYmtOT0d6bnBJU2V1STd5bEtmRXRTa0ZT?= =?utf-8?B?R2JFckpDUDFpUS9GbHpJNHBiVFowb1JDQkFUbWd6R1I2QUhDbXZ6ZzNKM1hx?= =?utf-8?B?R29RdEhDZ3MzV3ZLK2RBRmZrYm9YTkZlUEFOUUxmZUpwODVuS0lXTFQrRktv?= =?utf-8?B?U3NPZlVpYi8wSXU3OGYyWkhWdG5qNDc4NlM1Y2E3ckdyRzdTc2o1MklJTTcv?= =?utf-8?B?aGozakJrSFNwdFFmZnhsTDIvYmhQMUFDNXF0YVpnSW9RTVBlT09tNkY2Q0Vh?= =?utf-8?B?a3hnSDFPR0ZDa0ZTQ0REYjZ2ZE1FN2QxUWd1TW13SVFsK3M2SEFnaTJ4QUk0?= =?utf-8?B?NGsxM2Q0c3crV2hvV2ZSVjRNL3RoRENoMkNTZ2dScDkxZDY0TnhORnJHOEN1?= =?utf-8?B?bSs5aGZMWnprQXpCeFBlbStucHJnUkk2S0hFV3VHejhudFgrTGJCTG01RTU5?= =?utf-8?B?dCtHbi9BZGVmT3FCT0RTTUJtM252NGNQOTRVT2NYK3ZINHVaRnBRTHRBUDZk?= =?utf-8?Q?3psUhVPe3YoQzAc8EA=3D?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1137;6:/1UwHQKw1snL4ZJclWD4DTwvtbu872kyk718wnYJLBqEFaiuNi2Xv3Mlvd9FPfu4zeYgA5LV7sXA9jrUriFdXeQKmMqY6zmuMRfQVc8ARA3eGU7A5fU4qW1v1nXzgtV+M2/B5l1aUhVsk7+rS4EAPsAez4ZrTghksW2mfbDbZzX7ZI9QEYKA6QvMvEJQ24A75ki+Cj7UbtToY6Utj0ETiTWO52yRhu9LB4u7InUJslrJGlGJIqlvfNrOdCCFbpBHAE/fqdoVi/qiAl664ooP4A/GXN53XD5fyU3qa4Twi8W/v80V+yVbR1c4B1eaXW5SdhCxRR1OhlH1lN2R+C49ZtoIFqm+f/gx59ZGC2PwHEg6j2A/O2E8vr5m3bk0EhRkMZb88vD+Uv+dgaJ+V4AdMFHiWIcxqdwDVoUjirMILFcZpEFwr/2TLZoo6PomBc0efZplcM59+cqjJsgojIOOKWKKr2iMuspDSqsCxSSeVUE=;5:QzP6lHOkjTyUhdJT2m8Ee7xQZC8JGG0euyR+PmHJvw5ChjSNlRCSTlV3TvyePCS7AApum/sHzo3GuVcQjmiWVpZH7G4uteOGDn3hIDjbWlRj6leOA2W7aQxzAq9Mzcni9JIpFc/8xf+MbWfdoxCfqg==;24:w4OqWooaPrg3obgAxfqZffciw4Uz6Tx0OG3+R8U8AsTwyuVu7G44izUUHNdgsKtV2/E+5Aw/bVy9hVVj1KNsrUab6OicKmQOK3d5QzkhYDs= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN6PR12MB1137;7:fkrN+8zCy9ajfBQ/J1YW7f7iDazcCa1smhTpySBL5f17YJQ7MPqVTRhMKFonkKikK/iCw3hKk0KZcQFtcebOIxmEMNPU4wvoljyF5qTjiV+vYbMY1sJceA6DrYofpOqQ2/pDZywpsln4EMcmHplmwB5nRUTUZj61dfRwG0dAFj9PiBTWtxGmVRVwszya8eyC7AWRBHpu8uo2w3u/gVTMLzlt2Ea9tt7ebJW7t+8yz7vpdRsYgkEJL6y32U+Lr2Ijj1GCoWipcdcgt17llZ6G+We0Bw9r6jd7c+jlJMhy+K7wWdCMaLvFOh9YPW/oyHyW1koWZPId5ffYiQBdZbfayQ==;20:uJwNKnxCL1FgbiPfuu3E6X9H0VoYWq2rfdiWWeiCJtUNYYRYoK3ob9Q7PVv7+aBt7HFA2w5YRRmUQC6qwgRiLFnciFJvBwwTO/4Uezz9isS8jk8KMefBLCJCZFhHFk+qgJrC2zugk/9CXNsy39lbj5xHj0Y0OvA6DmWkR8QCoYoG776shxeMc872qnS2cSisGCexysEeMaV/1iWr06XAj9lwYpl8fEPEmijzkNhxf7NGS8hrsx/lVOrM5jbsF7r/ X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Apr 2017 21:20:23.2046 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR12MB1137 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add warnings to let the user know when bounce buffers are being used for DMA when SME is active. Since the bounce buffers are not in encrypted memory, these notifications are to allow the user to determine some appropriate action - if necessary. Signed-off-by: Tom Lendacky --- arch/x86/include/asm/mem_encrypt.h | 11 +++++++++++ include/linux/dma-mapping.h | 11 +++++++++++ include/linux/mem_encrypt.h | 6 ++++++ lib/swiotlb.c | 3 +++ 4 files changed, 31 insertions(+) diff --git a/arch/x86/include/asm/mem_encrypt.h b/arch/x86/include/asm/mem_encrypt.h index 0637b4b..b406df2 100644 --- a/arch/x86/include/asm/mem_encrypt.h +++ b/arch/x86/include/asm/mem_encrypt.h @@ -26,6 +26,11 @@ static inline bool sme_active(void) return !!sme_me_mask; } +static inline u64 sme_dma_mask(void) +{ + return ((u64)sme_me_mask << 1) - 1; +} + void __init sme_early_encrypt(resource_size_t paddr, unsigned long size); void __init sme_early_decrypt(resource_size_t paddr, @@ -50,6 +55,12 @@ static inline bool sme_active(void) { return false; } + +static inline u64 sme_dma_mask(void) +{ + return 0ULL; +} + #endif static inline void __init sme_early_encrypt(resource_size_t paddr, diff --git a/include/linux/dma-mapping.h b/include/linux/dma-mapping.h index 0977317..f825870 100644 --- a/include/linux/dma-mapping.h +++ b/include/linux/dma-mapping.h @@ -10,6 +10,7 @@ #include #include #include +#include /** * List of possible attributes associated with a DMA mapping. The semantics @@ -577,6 +578,11 @@ static inline int dma_set_mask(struct device *dev, u64 mask) if (!dev->dma_mask || !dma_supported(dev, mask)) return -EIO; + + if (sme_active() && (mask < sme_dma_mask())) + dev_warn_ratelimited(dev, + "SME is active, device will require DMA bounce buffers\n"); + *dev->dma_mask = mask; return 0; } @@ -596,6 +602,11 @@ static inline int dma_set_coherent_mask(struct device *dev, u64 mask) { if (!dma_supported(dev, mask)) return -EIO; + + if (sme_active() && (mask < sme_dma_mask())) + dev_warn_ratelimited(dev, + "SME is active, device will require DMA bounce buffers\n"); + dev->coherent_dma_mask = mask; return 0; } diff --git a/include/linux/mem_encrypt.h b/include/linux/mem_encrypt.h index 3c384d1..000c430 100644 --- a/include/linux/mem_encrypt.h +++ b/include/linux/mem_encrypt.h @@ -28,6 +28,12 @@ static inline bool sme_active(void) { return false; } + +static inline u64 sme_dma_mask(void) +{ + return 0ULL; +} + #endif #endif /* CONFIG_AMD_MEM_ENCRYPT */ diff --git a/lib/swiotlb.c b/lib/swiotlb.c index 74d6557..af3a268 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c @@ -509,6 +509,9 @@ phys_addr_t swiotlb_tbl_map_single(struct device *hwdev, if (no_iotlb_memory) panic("Can not allocate SWIOTLB buffer earlier and can't now provide you with the DMA bounce buffer"); + WARN_ONCE(sme_active(), + "SME is active and the system is using DMA bounce buffers\n"); + mask = dma_get_seg_boundary(hwdev); tbl_dma_addr &= mask;