From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751303AbcGNJdk (ORCPT ); Thu, 14 Jul 2016 05:33:40 -0400 Received: from mail-bn3nam01on0081.outbound.protection.outlook.com ([104.47.33.81]:13672 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750739AbcGNJd0 (ORCPT ); Thu, 14 Jul 2016 05:33:26 -0400 X-Greylist: delayed 63485 seconds by postgrey-1.27 at vger.kernel.org; Thu, 14 Jul 2016 05:33:26 EDT Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Suravee.Suthikulpanit@amd.com; Subject: Re: [PART2 PATCH v4 07/11] iommu/amd: Introduce amd_iommu_update_ga() To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= References: <1468416032-7692-1-git-send-email-suravee.suthikulpanit@amd.com> <1468416032-7692-8-git-send-email-suravee.suthikulpanit@amd.com> <20160713141457.GF21976@potion> <578757A8.3000200@amd.com> CC: , , , , , From: Suravee Suthikulpanit Message-ID: <57875C4E.20203@amd.com> Date: Thu, 14 Jul 2016 16:33:02 +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: <578757A8.3000200@amd.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit X-Originating-IP: [223.24.91.92] X-ClientProxiedBy: PS1PR0401CA0001.apcprd04.prod.outlook.com (10.169.107.139) To BY1PR12MB0440.namprd12.prod.outlook.com (10.162.147.141) X-MS-Office365-Filtering-Correlation-Id: 1d4b5363-c3c3-4d38-73d9-08d3abc9e6bc X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0440;2:YfFivSuT4sSFRriwRS8iRv1V+9Ksy2yzbS6LPtrzjnlI1pPRvay58fF6bFmh3mNwxummEZRS4Pn0qeqGL1mdg1iXBJai75dmkg5/ObP+tOGISkq9QXJ1LuqD0HmRD9sJCQ7a/U7m7lQYHPL/x2pLcihOsc+urdJHdGNtuC25O85zhwLDe+zl5MFdkD4dHMAI;3:eflcz3/YZJ0v2XQZBmPQA38SfFNf5c/9YdBbRIbDcjm2LvG4tDvGv1OqOfqPx3b6t7KwvwCP0yjOq7LnpdMXzAbQROIa2+oCgCFUjlM9cAXEuxEWy6UVPd8qrxgakokV;25:lwIERM/1kAtBZgJEwcvq5u763dmEcX6aPua/MRHstArBgPPJWkdh/gdq58ayN9nvw2H0/1WljYXajH109zhcsGKBLRgQPwxxdcONDpQ61VM7SXfWbvguqnRIvB6DnA/5v30G89LQlybi9J7HcwcPxOCEC1Cs4VXDbGjavdA5b3xyjkTyaJJY51aGA+cxTLmz5hRjqne6a4DNguLWi8r/ZWBioo4AkgKGRqRZAEykjl2M4bIVpmx9hRqyvE2Vo3cRiacZlFKUkjSE7KmHssBXNI+yETYrj8THQ53K3gkVnfkyICiSfGkBMaAFQ5I3meSErRKFX65GwseOJgscjndAU6dQpCHv5orzGdGHt2BusJPof7kZu5zYBhkMgK3NFXqyrCnoC29nWZZ1ktjD81sKiO8HRk+SflZ9nZQoj5VIQ/E=;31:TMledaokFGnakOdqsaFqOagQhd3Wskiu5AKRodoWKD04xyUU8HMTtljaVtXMC8bs15co2vw9uoOY5z1OpHLpYwCVJdEC3ST3YQmrRuyJdmqrgMnCY92hmA3xTiiO2QLcKpsLe9Avwu//bYMNZ3nB4PDdZty9UFmhA1socbVSB/goZUpNOgVSdLd2ueQHtwYcyPNu08l97RKM59hJjubsdw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BY1PR12MB0440; X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0440;20:9KY3ZeQ2N5JVtB0XIcIyJL2PtwApMKj1/45HwgEZ2p5k9y0Dzozd3sYGBc7xWAY9xNbMFfQCKzHYPXbQy1oJUOVBbjTKESZ6Dp8+eM3c+KyIBk0RLFAaKAe9gFpKl6SEGPrtV+dYojOhfXd4kvJ7mL4v2u25slQLD/dO5LiUXfHiAEd19O1yYrASxZwIxEQFxmAngrg3ZhmV91fcWrlZM9+2maOFUfTAWxUOxD5HKaT4V/tbGFsVqGq4HxWZUiwuJd83n33YYwPMug4NfNo7ZwJ/+gOZDUhriJDVPmodcJL5U3QHCDRc7t7t7u8PDtJpYRIPymik6iE056AAxz+UjMnWr699PeTnDM4BeA/cJD0CgqR3t+L4nD4tGQbY50Zpz3G6VATTkypumB5NjX6JTPNWpSr/giVVI7GW8MeqeAgSk4DSkLjwnq0h3VjiqwOiRqhR4Dy9R2D+bdrc/2joM3zXWfpm/Lh9/KTIMH0QbY8Ya/GlRpE1dUR09P1QHjpS;4:fd8fQ2XpVfG7DgSATjAZYdUtIu5+PT4LAXk7YV5Lb8gOMirf8c0Pyk66nF5Ex0smKWQSnKyE1mknhxXW1uRJcFH1eNBxnMGOivABKJlrBslpNftucRAke9ACmKqI4jJ31QzIu2cfsSTd/wg2JDmAysV7gZx/GVZyJkHKblr1sk4OcJG5DkPWH8f9uEZZ2vT3ekwlDjTSmCHCTaS9caXTiPt2BjlXphJD1tKYAXgsp0hKGxT66U5OpH1CUEMod6fUF/JThuYl2BQNwgId4hq8qQ5fHDzbcnVg+cqL7YarfOyes8O09hh3AbG+jXSldy8NJ+k4VKr+kWibyE6X2Sn9p2SnWHH+j0fD6erM0rDcdDifC5wnx8YUU/IYONyb+WsB4HXUy5ckcYlsVJhInBFGJA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026);SRVR:BY1PR12MB0440;BCL:0;PCL:0;RULEID:;SRVR:BY1PR12MB0440; X-Forefront-PRVS: 00032065B2 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6049001)(6009001)(7916002)(199003)(189002)(24454002)(77096005)(230700001)(81166006)(81156014)(4001350100001)(2950100001)(86362001)(7736002)(65816999)(33656002)(76176999)(54356999)(117156001)(50986999)(305945005)(4326007)(6116002)(7846002)(42186005)(586003)(3846002)(50466002)(23676002)(2906002)(106356001)(110136002)(83506001)(92566002)(8676002)(64126003)(101416001)(93886004)(47776003)(189998001)(68736007)(36756003)(97736004)(65956001)(66066001)(65806001)(105586002);DIR:OUT;SFP:1101;SCL:1;SRVR:BY1PR12MB0440;H:[192.168.43.18];FPR:;SPF:None;PTR:InfoNoRecords;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCWTFQUjEyTUIwNDQwOzIzOmtQRkh5bWIzY0xLNVlYQm1uVk9oWitPYU15?= =?utf-8?B?SDk1c3Y5Q20wanRsZUtoeTJabEZJNmVmZ1huQzUvdEl3Y25QdGtMNkZ5Q1Z1?= =?utf-8?B?QjhJaTMvdmxLcUJ5QXk0YW9abWZPNEphZHRKTnZabkZ6K0Zzb25NeXQ0Y015?= =?utf-8?B?ZW5DZHBvMTBxV2xNZHhSN3NFSWVtS3Bqc1JpcEQ3V2FXcGtsT1lRNG1RTlY0?= =?utf-8?B?VS9FL3kwRDdzYjA3YUZvT2NlVG5nV2VTOHdjTnN0bVlzS0dHNFlmdnNhb2M2?= =?utf-8?B?N2FjOUoxQktNa3VMWHBNZ1p0Y3hnS2s3bU1tRzliTWJ2V3Z4a3VlRzlvTGZR?= =?utf-8?B?elo4RFNRK2tKOXVWRGk2Nk1YNUorR21LK1FmLzVjT3UxcEdUMWZhekZzOTlw?= =?utf-8?B?UDFUVkZSaDlmTW41MFduSjZRdWlKWEVjN0cvYkxDa3hzaHVCOXhmRDhtM0VH?= =?utf-8?B?UGFRaVNrNEF2T2ZQamVCYStNTnJWOGpoeGRPZitZaEZwK2h1VDNNZjBEejBU?= =?utf-8?B?KzJ1VHBZakpEMStNYnBFMEF0UURUSC80NEJCUC90a1pDd25NNlpJemxyRGxV?= =?utf-8?B?OGVCRUY1UjRNMkczL0k1Mk1EOERBOGRobWZBbHNWYlJ5bzB0WG9oT1Q1NE5X?= =?utf-8?B?OE96Qk1oZkNhVnZuQkt2NkFxQVhvSnU0aFpoS0lkT2hteFUyWW9oMmpWUExZ?= =?utf-8?B?NW9XQXhYWW85MFBOQ3R5T1NHeEZlZm1tdnErNGpGWUM5elNsSDlvOHU3a3hl?= =?utf-8?B?YkdITUFadHFoT1pzTHZBVTNCSVQ4MlBjQ1dYTnRrUFRCTWp4S0EvR2ZDeXlp?= =?utf-8?B?Z0twZnI5YWVIQnhZRmp5cm9aZTR4aWFtelprZHlwZFVSTWE1NDZUSnBVdUlQ?= =?utf-8?B?Y2NMSS96d1JPMUZNcS9rcmZsMjU1cXRDUnFYYWlwOWs3d2JaT2hCcWV0MEov?= =?utf-8?B?OGszQ3FXKzlUNDZzZHREcWY5THR0VlFDNmFkRDIxL2FyQXpnbEF6a3UzNkhl?= =?utf-8?B?RGxIaVZ4bStpdHZpckRWWWhrOWFuSElNeEU0cmJsZXc1MndpMjFlVVV6S3J2?= =?utf-8?B?QjIwTVIrUGkzdERhTklTNTFhamg5T3IzdXU1bHZVTS8xUTNORVhFM0F4Mnlj?= =?utf-8?B?SFhjMXRwUjhXbVVYY1NablFBWWxIY2ZBcjNPVDlXaGJmbFU4R0pKbThBNllD?= =?utf-8?B?K3ZHaDEybDRaNjVMdGhxcVZXSE1YQ0FIcVRSOU5rQSs0Nk5DTHhwR0g3S2M3?= =?utf-8?B?RlZMZUZyQ3pRdnVSMDFIVUI0YTg3TGdqeE5KWlhCM1h5SjJaRmxLRXVsaWw5?= =?utf-8?B?YXRYT2NkaCtmMmlOL2xGQlBRUjhTRW5QSzRUcUhUNDd0ZGRyaGpYbm4xOWt5?= =?utf-8?B?VXhHb0o0RmVNbllacExUTjUxQXRYY3laNzBjSVN2eDhPQ0JiTHRhZzBrUy95?= =?utf-8?B?Q1B1c1BiczF2eFpVSm81TmR4UFlkRHBkUFpyMlBrYStmWHRSdUR1Tit4WldY?= =?utf-8?B?RjdZQzVjckYxWSs0TjBWYklBbDdBdkdMRnpteHczVDI1YzNDZ1BtMHBreS9l?= =?utf-8?Q?s0tFUIcLgu1ux5vA4/T1ZIXlpDtVq/kI6De0dQfZbiR0=3D?= X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0440;6:Bk/IwmQ6ulV23DWBePrD/hwcSKWDh6GbRR5ZBoHlXd5QXzJyhMHIjliEhS2OtsHA+38t0DUzrjbfk92xVGEJ69DYquGpXN3Nlht7VPf6pC+AR7bzoLiKVkgrblhL4ddjKDCyh3uSqDsEoJcSBHSW097GGpX8I6HAaCyXKz/SVK7KfFMVTLUdRlc2ZRY9BYdW8/7xd3wlr4UNhlOjh/14dwsqhgL5TduFn9QGPihoOXKDL/wy9Os07V6HS3ttyr5utrVcbo9qzrxS3jpnEKcwRuF7MVE/sROKSsekGbtUcIPbNRTBd+NR1hBK4sSP6ZMZD3xQY/rW/dXYAVR2IzHJpQ==;5:JyC8SEH9p46N0DphW8qqluU0+fQwMFUWjfza2sa3fvSOcn1l1oiV6Zae+Rlhu0jjYWapPGQofCP8XhV66MDFnMBySH/6W4pGGvsnSouKNj6gJgaEPbGg4sFyT8ZIHp+LK3bDSOYS3jjsmbDwkx7d/w==;24:2VI0f8i0zprHeVgvBZBRK/idq2FqQDfsZwY01URDb/7IC/WozouHy1KIcwAnmKuJsZG/CYiMEtOeLOSoQbooPyfcF7YDGPTHIGD8jMinuNo=;7:GxqKfpNofxdJlciGNqHj+m+Pa4uAReGM1tqyMzI2tg0Xikok0cJdkCz0dSUDDiPkk74qD82NzM7DHqSQrG4jBnqaeKfHxVHpOtPFlsvsvokK5epWV0IdvnFhiGBwVrjhVFbiLZvsWQ3NGhU3dz1PtTRhtDILyHTvMs1mpSrEvJpul7xkY3CaK7O+Bhf4Us74zcXFJt+3ELmAI1uuyIELd/x8897B8gt8kgqnUEqkHCG72TxznHI4UsqAEz1Ayj7Y SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BY1PR12MB0440;20:Wmm9UxjPsZ/kSDyGM7DriXJl0aqvJUS+a+8gaw3Yh5NxhgQQBTmV58CblGDhqqRd4t6c16o0tQXM+CIkvySxQm3NiMmAfJ1rCsoopQovv1fwb0qVrEjV7nrvavkBvVrhZPx4Ps9In2feZThBMhDLxeG2gsrGQYVTBapYOO9ALpXyeXQDh1l2UVq69/khQme/xYb34xtNqvxU4lEpFrDwSn5OAuXv1a3OeQrP1GwNmCPUedLmeO9iD6o1uVQx6fwh X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Jul 2016 09:33:20.0428 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR12MB0440 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/14/16 16:13, Suravee Suthikulpanit wrote: >>> unsigned long flags; >>> + struct amd_iommu *iommu; >>> + >>> + if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir)) >>> + return 0; >>> + >>> + for_each_iommu(iommu) { >>> + struct amd_ir_data *ir_data; >>> + >>> + spin_lock_irqsave(&iommu->gatag_ir_hash_lock, flags); >>> + >>> + /* Note: >>> + * We need to update all interrupt remapping table entries >>> + * for targeting the specified vcpu. Here, we use gatag >>> + * as a hash key and iterate through all entries in the bucket. >>> + */ >>> + hash_for_each_possible(iommu->gatag_ir_hash, ir_data, hnode, >>> + AMD_IOMMU_GATAG(vm_id, vcpu_id)) { >>> + struct irte_ga *irte = (struct irte_ga *) ir_data->entry; >> >> |>> (The ga_tag check is missing here too.) >> |> >> |> Here, the intention is to update all interrupt remapping entries in >> the >> |> bucket w/ the same GATAG (i.e. vm_id + vcpu_id), where GATAG = >> |> AMD_IOMMU_GATAG(vm_id, vcpu_id). >> >> Which is why you need to check that >> AMD_IOMMU_GATAG(vm_id, vcpu_id) == entry->fields_vapic.ga_tag >> >> The hashing function can map two different vm_id + vcpu_id to the same >> bucket and hash_for_each_possible() would return both of them, but only >> one belongs to the VCPU that we want to update. >> >> (And shouldn't there be only one match?) > > Actually, with your suggestion above, the hask key would be (vm_id & > 0x3FFFFF << 8)| (vcpu_id & 0xFF). So, it should be unique for each vcpu > of each vm, or am I still missing something? Ok, one scenario would be when SVM run out of the VM_ID and having to start re-using them. Since we want SVM to generate ga_tag and just pass into IOMMU driver for it to program the IRTE, we probably can make an assumption that SVM would make sure that ga_tag would not conflict for each vm_id/vcpu_id. Thanks, Suravee Thanks, Suravee