From mboxrd@z Thu Jan 1 00:00:00 1970 From: Muli Ben-Yehuda Subject: Re: [PATCH] KVM: PCIPT: VT-d: fix context mapping Date: Wed, 18 Jun 2008 23:30:05 +0300 Message-ID: <20080618203005.GA7186@il.ibm.com> References: <1213729526-10410-1-git-send-email-benami@il.ibm.com> <1213729526-10410-2-git-send-email-benami@il.ibm.com> <1213729526-10410-3-git-send-email-benami@il.ibm.com> <1213729526-10410-4-git-send-email-benami@il.ibm.com> <1213729526-10410-5-git-send-email-benami@il.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: amit.shah@qumranet.com, weidong.han@intel.com, raharper@us.ibm.com, kvm@vger.kernel.org To: Ben-Ami Yassour1 Return-path: Received: from mtagate6.uk.ibm.com ([195.212.29.139]:22927 "EHLO mtagate6.uk.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752235AbYFRUbh (ORCPT ); Wed, 18 Jun 2008 16:31:37 -0400 Received: from d06nrmr1407.portsmouth.uk.ibm.com (d06nrmr1407.portsmouth.uk.ibm.com [9.149.38.185]) by mtagate6.uk.ibm.com (8.13.8/8.13.8) with ESMTP id m5IKUd2W281316 for ; Wed, 18 Jun 2008 20:30:39 GMT Received: from d06av02.portsmouth.uk.ibm.com (d06av02.portsmouth.uk.ibm.com [9.149.37.228]) by d06nrmr1407.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v9.0) with ESMTP id m5IKUdPp2592926 for ; Wed, 18 Jun 2008 21:30:39 +0100 Received: from d06av02.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av02.portsmouth.uk.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id m5IKUcCr018491 for ; Wed, 18 Jun 2008 21:30:39 +0100 Content-Disposition: inline In-Reply-To: <1213729526-10410-5-git-send-email-benami@il.ibm.com> Sender: kvm-owner@vger.kernel.org List-ID: On Tue, Jun 17, 2008 at 10:05:26PM +0300, Ben-Ami Yassour1 wrote: > From: Ben-Ami Yassour > > When changing the VT-d context mapping, according to the spec, it is > required to first set the context to not present, flush and only > then apply the new context. > > Signed-off-by: Ben-Ami Yassour > --- > drivers/pci/intel-iommu.c | 17 +++++++++++++++++ > 1 files changed, 17 insertions(+), 0 deletions(-) > > diff --git a/drivers/pci/intel-iommu.c b/drivers/pci/intel-iommu.c > index 930874f..dcdfa97 100644 > --- a/drivers/pci/intel-iommu.c > +++ b/drivers/pci/intel-iommu.c > @@ -56,6 +56,7 @@ > > > static void flush_unmaps_timeout(unsigned long data); > +static void detach_domain_for_dev(struct dmar_domain *domain, u8 bus, u8 devfn); > > DEFINE_TIMER(unmap_timer, flush_unmaps_timeout, 0, 0); > > @@ -1264,7 +1265,23 @@ static int domain_context_mapping_one(struct dmar_domain *domain, > if (!context) > return -ENOMEM; > spin_lock_irqsave(&iommu->lock, flags); > + > + if (context_present(*context) && > + (context_domain_id(*context) == domain->id) && > + (context_address_width(*context) == domain->agaw) && > + (context_address_root(*context) == virt_to_phys(domain->pgd)) && > + (context_translation_type(*context) == CONTEXT_TT_MULTI_LEVEL) && > + (!context_fault_disable(*context))) { > + spin_unlock_irqrestore(&iommu->lock, flags); > + return 0; > + } Can we wrap this in a descriptively named function, which will also and release the lock? I think it will make the flow more obvious here. Cheers, Muli