From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752560AbbIQQAc (ORCPT ); Thu, 17 Sep 2015 12:00:32 -0400 Received: from mx1.redhat.com ([209.132.183.28]:52731 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751477AbbIQQAa (ORCPT ); Thu, 17 Sep 2015 12:00:30 -0400 Subject: Re: [PATCH v8 03/13] KVM: Define a new interface kvm_intr_is_single_vcpu() To: =?UTF-8?B?UmFkaW0gS3LEjW3DocWZ?= References: <1442393409-2623-1-git-send-email-feng.wu@intel.com> <1442393409-2623-4-git-send-email-feng.wu@intel.com> <55F934F5.7040605@redhat.com> <55FA8AED.6090700@redhat.com> <55FACD35.1030602@redhat.com> <20150917155821.GB2573@potion.brq.redhat.com> Cc: "Wu, Feng" , "alex.williamson@redhat.com" , "joro@8bytes.org" , "mtosatti@redhat.com" , "eric.auger@linaro.org" , "kvm@vger.kernel.org" , "iommu@lists.linux-foundation.org" , "linux-kernel@vger.kernel.org" From: Paolo Bonzini Message-ID: <55FAE395.4000008@redhat.com> Date: Thu, 17 Sep 2015 18:00:21 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <20150917155821.GB2573@potion.brq.redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 17/09/2015 17:58, Radim Krčmář wrote: > For interrupts from MSI and IOxAPIC: > - Flat logical interrupts are delivered as if we had natural > (CPU0<->bit0, CPU1<->bit1, ...) flat logical xAPIC for first 8 VCPUs. > - Cluster logical doesn't work much, it's interpreted like flat logical. > I didn't care about xAPIC cluster because Linux, the sole user of our > paravirtualized x2APIC, doesn't configure it. > > I'll paste kvm_apic_mda() source for better explanation: > > static u32 kvm_apic_mda(unsigned int dest_id, struct kvm_lapic *source, > struct kvm_lapic *target) > { > bool ipi = source != NULL; > bool x2apic_mda = apic_x2apic_mode(ipi ? source : target); > > if (!ipi && dest_id == APIC_BROADCAST && x2apic_mda) > return X2APIC_BROADCAST; > > return x2apic_mda ? dest_id : SET_APIC_DEST_FIELD(dest_id); > } > > MSI/IOxAPIC interrupt means that source is NULL and if the target is in > x2APIC mode, the original 'dest_id' is returned as mda => a flat logical > xAPIC to 0x0f will get interpreted as (cluster) logical x2APIC 0xf in > kvm_apic_match_logical_addr(). > xAPIC address are only 8 bit long so they always get delivered to x2APIC > cluster 0, where first 16 bits work like xAPIC flat logical mode. Ok, I was wondering whether this was the correct interpretation. Thanks! Paolo