From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751211AbcGNJoW (ORCPT ); Thu, 14 Jul 2016 05:44:22 -0400 Received: from mail-cys01nam02on0044.outbound.protection.outlook.com ([104.47.37.44]:7131 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750916AbcGNJoN (ORCPT ); Thu, 14 Jul 2016 05:44:13 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; Subject: Re: [PART2 PATCH v4 10/11] svm: Introduce AMD IOMMU avic_ga_log_notifier To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= References: <1468416032-7692-1-git-send-email-suravee.suthikulpanit@amd.com> <1468416032-7692-11-git-send-email-suravee.suthikulpanit@amd.com> <20160713142953.GA13201@potion> CC: , , , , , From: Suravee Suthikulpanit Message-ID: <57875ED3.9090307@amd.com> Date: Thu, 14 Jul 2016 16:43:47 +0700 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:38.0) Gecko/20100101 Thunderbird/38.7.2 MIME-Version: 1.0 In-Reply-To: <20160713142953.GA13201@potion> Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [223.24.91.92] X-ClientProxiedBy: SG2PR01CA0058.apcprd01.prod.exchangelabs.com (10.165.10.26) To BLUPR12MB0434.namprd12.prod.outlook.com (10.162.92.14) X-MS-Office365-Filtering-Correlation-Id: 99bc0eb5-561d-47b2-ca38-08d3abcb67d8 X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0434;2:Fok7MKKTcaMgimvBlr14WVGmP1CmZu60ZOnpKVE1l8YNZSm92NrtzamgDQzmpo6k/tDAQRgigg0peDKfMrLlOVc4HNcmY+WQEoQXqf8GLGQJqJhf+UlaWv7giTQ559qw/Mre4favSvDo1IvqhSiwbaXdwcVmHnZtt/zJviZjgm1j5mXubF9YKzJAboVJlGOE;3:6Ib5oRJrSnwiU9wFSEU93m8Kuj1BaW3XvoSG8U2W6YO8XhyM5LlE9RDhSJuP4UpbsMYsScL3F63GEkzEI8veBjlqJvtapG2nyLo+tXTnX7qjafQB6LGXNvcSeVlW/mx+;25:/z0+jOhVgUyTON7oRD6o5oKXvsP01fUho8mVbXsJ9ob7P2tRMYKqMTsGajbGpHUCe12gqWnI5JNiaubsGaWbgLBpJ3SfjpfuEsHTY52lVSY8MDEdav14a7XUgCKh4O4cMys4b5r3xXZSFndMtimq3qzmc2sIaPTuYfyFPvpmex1XzlEFFQuVu1cXh0Yrq9buV6hXPpwK/u7DEFFVKNsildHmlLpp+F+e76XbxMAyAelk1Lp6sO6d3b2xLpqwSCghz38bvmqIba9n9Ocwic+ywlZm94sjtVb7vea/Fq7WnL+4GZY6RhjIMqSTgDOEw+/f23zkNI9yT9N3NjLeynMOpE1gbBOHRRyKDaW7AHFrLCxptd0zFGfKV7lI7LZ5Cjya7YJWmEfO8O87Eud8wQmMhjNdeS7sBQD48Zff5oz6rcw=;31:LY57l/5Pvt8IVddKUMX5BSTBeseb7kZVl2D0u/pGRdcFoEjxcH56l1tcgZkvTgZuDHnrsihLzlZWM0SeIvfUseXV2okXDyACW7MY+3qeouAbT0bzGC1M1OqsdyDGXRsupatg2R+aQRqd61WhrTQB3277/m+pRlNoa5p9IC+ZOdNtiDk9UVBbSR33x/q7fn++tHzIsGH0wstmt8jZK42Ipw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0434; X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0434;20:Us5lxEcCxBwhj+xDJmN6ek2llSyaxskpy4gklfVxdjJimhfLIOEHnHgDxDr/8xatpjpXNllQdrt5YxfI+iuGzt4w3rQ8yhppyaphJWlZtA13sSEJuw7E/hVhGNm7efcH9wk9LFBtGKXEXvHs/gM5MieBAlU7ofA+CISpS5n6iGs/ZVx6CnYj/Uck39R2XZeWNtROYy+rXH/RTY1nWjtpuunu/RVw13e1UoX9eZd1173qh/LMESiPVAnv/gmBGWWC/Ruay6IJHMdyI3vKndiB+Ln/6qFOgYuYPCIFLXqUK492thOTOUlsoVQoR05IC53eAk02TdK0AHkx8urdH6M8WxiweTcVDAKC1Z25mhX/C07yi3bfdPEQj2z5U7NuXNWO+y2+a1HBC/eTqif96CA0xz+FzmirSV5rHyb4oonp9jKffeH2CdM3wQ7T1K/slcmfnvEDOsFGIUkOLjkRY988e0QNJT+tp+NVBNhyyp/BqloRSfD+sDlmQ0QxM4cycRoz;4:PYzx26u6qf3O7ukLN5TC1VgZoeg7/Gj4fpx3hp4S1APhqYybvJso8dhmWjiBgCm5TnzugbLUM/b8b+XMsPjjwYgTf1tMuAi+ZGdJOngxBG8qCWzR4Dy0JhCRai36O3FiuTHG9PT60za1KhmBF+ZpKfjloUZR05lijN8PDtZ41AAx7pSqNGpK/XpAAAE6QFymuAiSkABRKAiOwQFvQfl+PGMr8U/Peycoz+owJdpD82eTd4f/A6mmIW93hLlCt6b/VNbDcxD6e+I0fSANjsi5k7FIthxtTJlmyBkn90TOkn9jvYvKdYnc+nj20QnkpC1yRP0cCExZJcqR9x4ZDMj5QKU+eCXqrSfAi/uEY0S2ryYaPc/+CDsdmh3VZp51PjoAXfDegMaMRLTJ2IQZ/WDk0CNKwVoDDwCu55wvP4ghzFI= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(10201501046)(3002001)(6055026);SRVR:BLUPR12MB0434;BCL:0;PCL:0;RULEID:;SRVR:BLUPR12MB0434; X-Forefront-PRVS: 00032065B2 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(7916002)(199003)(377424004)(189002)(24454002)(68736007)(87266999)(23676002)(4001350100001)(189998001)(97736004)(77096005)(86362001)(2950100001)(7846002)(65806001)(6116002)(3846002)(50986999)(47776003)(586003)(54356999)(66066001)(65816999)(2870700001)(65956001)(76176999)(2906002)(110136002)(101416001)(36756003)(50466002)(81156014)(81166006)(8676002)(64126003)(105586002)(99136001)(33656002)(7736002)(80316001)(83506001)(19580405001)(19580395003)(4326007)(305945005)(92566002)(59896002)(117156001)(42186005)(106356001)(217873001);DIR:OUT;SFP:1101;SCL:1;SRVR:BLUPR12MB0434;H:[192.168.43.18];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTFVQUjEyTUIwNDM0OzIzOmFjbXJXRVNiOGM2cm9qZFFIWjQvNXZnR0ZO?= =?utf-8?B?SWRYcFBNemREREVtQ29HbG9UTHlZdDdqeVp5djJwMTk4SXV3Z3EyME92RFJR?= =?utf-8?B?K2NKM0M0ZVNEODJxdmJZcUJZeW5UVjJya1Ewcm9vM25KSzd5aWdhMVE2SStr?= =?utf-8?B?dzBhSDNMNTBLQ2Frbkx5NXdDQ2NFakFNTkRuMVFuU1V2NnBpcnV6UHBmK0FO?= =?utf-8?B?cTJRWW1VNTc3SFFhNERYMXp3aFk0U25tSmZoNksvODNSTjFjK1RzTUNOWGZO?= =?utf-8?B?cDNLMXRsTFFLaE5sWnJFTGhQdlJOOGhEMzk0TzFXR0NrL2ljYlcyTFJGVlZ2?= =?utf-8?B?dDJYK1BVakU2TE5ieElRczhpN1kvN3I5YzdDa2ZUTUhRdis2dlcwY2N5WU1H?= =?utf-8?B?cTNxRkJpT25UWUFhbnZJMHZMbjM2WXNlM2pBcVROeDFWOXVxUVdqalZjc0NQ?= =?utf-8?B?OFlxWXMwNmZvWFhnL0xCdXhidzZ6QTVtTWFPY1ZETU02a1EyTm1HMmNiY3dt?= =?utf-8?B?WGVMVVpLcjZyUjBpc3RMQWh2VFpGKzBtclpiL015U0xYcHRmZ3RZZ052bWVl?= =?utf-8?B?V1NNRjJyYVpxRW9PNU8yK29mVmV5cTFGVVR1czM1QWRORFptekcxNHV1bEFo?= =?utf-8?B?dmlVQXozK2EvbVc0THlTS0pUeEJOT0dFb1I3YWsvYTJhNzBKZXdjdWJtZnIz?= =?utf-8?B?NmIwODdJZTNZUUY0UGdpaHBKSUtqQTZSZllQLzh5bW80dnVoWVQ5WVoxTlpX?= =?utf-8?B?Qk4zbG1EUFQ0TzM4N1Izb2JvUHJVMWV5SWx3aVAweFBwaXNsRjR0MHRuR09N?= =?utf-8?B?N1F0TXJIeUxiQVZaNXQ0di9DWkJ2T0pZYW1DdWVpVi80L3JQNy9zNGVkcmVS?= =?utf-8?B?Tk0zNjJrYmZYNUd5RlIxNEFwZ0tSeWJUMzhhUUREeVE1RlFlNjV2QkVsY2J1?= =?utf-8?B?M1JLV2dURDdPSkxRNk9mY0xNdmp0OURWYUlVQTk2YXlKSDN1eVNvMW5xMlhX?= =?utf-8?B?VEpsSW1WbVJKRzNzSXFacThORjVrQmVBOTRJaTZkQjg1Yml3a1d1cVhVSmUr?= =?utf-8?B?cU5TNW1GVTAwUVVOZ2dLaFh2TlFIMFBob2NjdnpZL05Ka3VVcUlFVlZ6MmQ0?= =?utf-8?B?ZmNPZlJ5cTFualM5MHkrN0RGaFRCSWkyclYzYndFUHlsNngzYnZwWXczblJz?= =?utf-8?B?VVJydExKeWlBMDVaY0N2Ykk2b0N1ZzJERW5Ta2Qwam9pSU5WNTVlRjVOWHc2?= =?utf-8?B?Q29ZYVZQek9PSkpCUytUUC8yVDY3bHFWbk1yTTBPRXZLN0dHOHJmSHFUNGNT?= =?utf-8?B?SCswU2xoeGlUZ0tadGcydVpYeDJiSTZvU0NhOU9GcnEySit6dEpKT1BtZTh2?= =?utf-8?B?Rm8vWGJKZlhZNWtXRHFNODVzMlZOK0s1L09ZbkdPV3Iyc0p2SDBwaGtZNmdn?= =?utf-8?B?Y3R5bVYrR1dKOTFLTmZCZ3JpQjdZc2Nvc0hFREhIa1dXdkVoRTR0UXNlMzFB?= =?utf-8?B?ekQ3a0QrZ1oxRUhVOWlvZ0NYb3B4eVFPVjUrbVVsSFBBV29JSzJPR3dqQTIy?= =?utf-8?B?anl1NHdRZy8wQW14WnU0R1EzYmMwUXBYazN5TUpUanV4VFFLbnFBeEp5Q2lH?= =?utf-8?B?Vk5veWJwcTBLMlJKdFBvZU1VWWlyZlljRGxVamNEMktITnR2ZjdUcDJrVEYr?= =?utf-8?B?ZEZnbVFzTHRxbjJmS2lKY1ZWeGd4WTFZVXNXb1FsSlFPcm05b2g1S1N3bEo1?= =?utf-8?B?Yy82RDNZTDVPTng2ZVFyTkRueTViNXozSUZEdEZlWWR2MDVURGx6Z2ljUEV0?= =?utf-8?B?RlllTWFEY2xPOWlZTXl6ZnVWWDczbjBFU1Z0WHdVNXpQUHc9PQ==?= X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0434;6:LCJoB4I/r1oD20qHfy//daVEO6sW3fm/G95vh1oDLDQ7GJP3wlS9g0Xq8txaD5R0RHD42pDZLfJnxMxXnA9ainXjgiOmi93Yjk5lkO2k6PsEeVj3aA/pMqEDJBHNpyeXNndCSQdgjFKoe0W2fGuie6aaQiZwRksILXQbd4Yz2KFizTt1Lo/uphySJwHS2Ab/KhHZoJCS34eh3y8wL8yIMLOJkk1Fe81hDQUitwrObSFFxux9Rz349sOEWkxq8IiEJtxEBQe0GaWrekiQz74oKFwzRD+RPzmJPvwKSrCWD1eBHoT+upShffw0n3Rd2lGSf6tqILNMD+5iWCm43I7E3w==;5:f3vYzMksKgANGsreGNMc8ysdOH/KP09SCHf/WdAkaxeWsqe2K+w01jfM2Yt+LW2Ymw4G1yAh35ZuKgFUSJLHrmbIGfQEs1N95Gg8zg3etGyBAvVgcgnV35v3IwKClZ9N6kBbzCQbTvkjy46GRS+CfA==;24:kNVZaR1RQZxcRwVBcvGPso8dximvY5eRfX2UISvFn9b4Nm5CJc6S2sAYBNzAuORkKziwT49YBZ61wAJhffiWn4lueSP22izWJYrtp1ru6fc=;7:MnN07ApHU1P0fXady1ldXAcI+OUasrMiP47r8DWakTvztIRFrVroorNdg0WkQveLoDhIV53k11ZOlw2GnUKGW3IYBwKqBF68Mc7JxqoEM47QNl1XUT4GgznUvh05wI9U9txUHBsTXvGuOcuo2tpRjkfXnjPTUnPnaO8RHcVVDGjdNn3DEgzDsQZ1cQZ9qvUmbIEgSkAlT99vNf11WG0CukgyTojX9RqDOW5Kd73mYQyf9VgKBuJV7YusZ5UVLNzN SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BLUPR12MB0434;20:X4lhkn2UQFfWWv+OduvC7G4ILWFj2qGt1CFMtLX0RfRt6vDPfNalOksuxNi9yeouFsLJxvA7z2B4npEKVRAfmPcarXsRero+aqYswG0UlRfl+Nslwgz0PpYuASOuN3+pM5RQZhiEikREETpIXXRmNYVY2XQZP2TgisGanIIvV2rF/jEcdAE6xdwNHDvJ+sPTf/rDUFmGWTtbAKCbLdnd5j6JKyGiFJTQohCM6HQJr7buBvK4/eX/ZO1rNPSGI2ul X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2016 09:44:06.3525 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR12MB0434 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Radim, On 7/13/16 21:29, Radim Krčmář wrote: > 2016-07-13 08:20-0500, Suravee Suthikulpanit: >> >From: Suravee Suthikulpanit >> > >> >This patch introduces avic_ga_log_notifier, which will be called >> >by IOMMU driver whenever it handles the Guest vAPIC (GA) log entry. >> > >> >Signed-off-by: Suravee Suthikulpanit >> >--- >> > arch/x86/include/asm/kvm_host.h | 2 ++ >> > arch/x86/kvm/svm.c | 68 +++++++++++++++++++++++++++++++++++++++-- >> > 2 files changed, 68 insertions(+), 2 deletions(-) >> > >> >diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h >> >index 69e62862..a9466ad 100644 >> >--- a/arch/x86/include/asm/kvm_host.h >> >+++ b/arch/x86/include/asm/kvm_host.h >> >@@ -776,9 +776,11 @@ struct kvm_arch { >> > bool disabled_lapic_found; >> > >> > /* Struct members for AVIC */ >> >+ u32 avic_vm_id; >> > u32 ldr_mode; >> > struct page *avic_logical_id_table_page; >> > struct page *avic_physical_id_table_page; >> >+ struct hlist_node hnode; >> > }; >> > >> > struct kvm_vm_stat { >> >diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c >> >index 16ef31b..1d9f2f6 100644 >> >--- a/arch/x86/kvm/svm.c >> >+++ b/arch/x86/kvm/svm.c >> >@@ -34,6 +34,8 @@ >> > #include >> > #include >> > #include >> >+#include >> >+#include >> > >> > #include >> > #include >> >@@ -928,6 +930,53 @@ static void svm_disable_lbrv(struct vcpu_svm *svm) >> > set_msr_interception(msrpm, MSR_IA32_LASTINTTOIP, 0, 0); >> > } >> > >> >+/* Note: >> >+ * This hash table is used to map VM_ID to a struct kvm_arch, >> >+ * when handling AMD IOMMU GALOG notification to schedule in >> >+ * a particular vCPU. >> >+ */ >> >+#define SVM_VM_DATA_HASH_BITS 8 >> >+DECLARE_HASHTABLE(svm_vm_data_hash, SVM_VM_DATA_HASH_BITS); >> >+static spinlock_t svm_vm_data_hash_lock; >> >+ >> >+/* Note: >> >+ * This function is called from IOMMU driver to notify >> >+ * SVM to schedule in a particular vCPU of a particular VM. >> >+ */ >> >+static int avic_ga_log_notifier(int vm_id, int vcpu_id) >> >+{ >> >+ unsigned long flags; >> >+ struct kvm_arch *ka = NULL; >> >+ struct kvm_vcpu *vcpu = NULL; >> >+ struct vcpu_svm *svm = NULL; >> >+ >> >+ pr_debug("SVM: %s: vm_id=%#x, vcpu_id=%#x\n", __func__, vm_id, vcpu_id); >> >+ >> >+ spin_lock_irqsave(&svm_vm_data_hash_lock, flags); >> >+ hash_for_each_possible(svm_vm_data_hash, ka, hnode, vm_id) { >> >+ struct kvm *kvm = container_of(ka, struct kvm, arch); >> >+ >> >+ vcpu = kvm_get_vcpu_by_id(kvm, vcpu_id); > The first result is not neccessarily the correct one. > > With more than active 256 VMs, there is a guaranteed collision that > cannot be disambiguated, so VCPUs in both VMs need to be woken up. > > Having a 24 bit vm_id and checking that > kvm->*.avic_id & 0xfffff == vm_id > would help a bit to avoid useless wakeups, but the collision cannot be > avoided. True. What if SVM guarantee that the VM_ID won't conflict b/w any two active VMs? Thanks Suravee.