All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jerome Glisse <j.glisse-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
To: Konrad Rzeszutek Wilk
	<konrad.wilk-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
Cc: "Jérôme Glisse" <jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	"Joerg Roedel" <jroedel-l3A5Bk7waGM@public.gmane.org>,
	linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Subject: Re: [PATCH] iommu/amd: Fix amd_iommu_detect() (does not fix any issues).
Date: Tue, 27 Oct 2015 09:53:30 +0900	[thread overview]
Message-ID: <20151027005329.GB3569@gmail.com> (raw)
In-Reply-To: <20151027004747.GA3569-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

On Tue, Oct 27, 2015 at 09:47:48AM +0900, Jerome Glisse wrote:
> On Mon, Oct 26, 2015 at 12:07:17PM -0400, Konrad Rzeszutek Wilk wrote:
> > On Mon, Aug 31, 2015 at 06:13:03PM -0400, j.glisse-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org wrote:
> > > From: Jérôme Glisse <jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> > > 
> > > Fix amd_iommu_detect() to return positive value on success, like
> > > intended, and not zero. This will not change anything in the end
> > > as AMD IOMMU disable swiotlb and properly associate itself with
> > 
> > Not sure how it disables SWIOTLB? The AMD Vi does not seem to
> > change 'swiotlb'. While 'gart_iommu_init' does. Did you mean
> > the AMD GART code?
> 
> So this is convoluted and painfull, each i look back at that it takes
> me time to figure out of thing happen. Basicly amd_iommu_init_dma_ops()
> will replace dma_ops to no_mmu unless passthrough, and when the AMD
> iommu associate itself with each device it will set the archdata.dma_ops
> again this unbind the default of swiotlb that is initialize before
> hw IOMMU.
> 
> > 
> > > devices even if detect() doesn't return a positive value.
> > 
> > Returning positive will mean that the pci_iommu_alloc will stop
> > processing _all_ other IOMMUs.
> >
> > While returning 0 will let it detect the other IOMMUs.
> 
> No see the IOMMU_FINISH_IF_DETECTED flags in pci_iommu_alloc().
> Which is not set for AMD hence my patch should not change anything
> it (AFAICT and from testing but i do not have all AMD hw the ever
> existed).
> 
> So i am just making the detect function do what the API doc says it
> should do. See line 72 to 80 of : arch/x86/include/asm/iommu_table.h
> 
> > 
> > Granted on an AMD machine there can be two 'IOMMU's - the GART
> > and the AMD Vi. The detection is always to call gart_iommu_hole_init
> > first, then amd_iommu_detect.
> > 
> > I presume if there was one more type on AMD we would run into trouble.
> 
> No because of IOMMU_FINISH_IF_DETECTED flag.
> 
> Hope this clarify thing this spagethi mix :)

Ok my bad amd actualy is using IOMMU_INIT_FINISH() so it finish before
trying other. Which make sense for AMD as AMD driver will call the gart
init gart_iommu_init() if it fails to initialize. If we ever end up with
a platform with multiple IOMMU beside AMD then we need to switch to the
IOMMU_INIT() instead of the finish one.

Cheers,
Jérôme

WARNING: multiple messages have this Message-ID (diff)
From: Jerome Glisse <j.glisse@gmail.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: linux-kernel@vger.kernel.org,
	"Jérôme Glisse" <jglisse@redhat.com>,
	"Joerg Roedel" <jroedel@suse.de>,
	iommu@lists.linux-foundation.org
Subject: Re: [PATCH] iommu/amd: Fix amd_iommu_detect() (does not fix any issues).
Date: Tue, 27 Oct 2015 09:53:30 +0900	[thread overview]
Message-ID: <20151027005329.GB3569@gmail.com> (raw)
In-Reply-To: <20151027004747.GA3569@gmail.com>

On Tue, Oct 27, 2015 at 09:47:48AM +0900, Jerome Glisse wrote:
> On Mon, Oct 26, 2015 at 12:07:17PM -0400, Konrad Rzeszutek Wilk wrote:
> > On Mon, Aug 31, 2015 at 06:13:03PM -0400, j.glisse@gmail.com wrote:
> > > From: Jérôme Glisse <jglisse@redhat.com>
> > > 
> > > Fix amd_iommu_detect() to return positive value on success, like
> > > intended, and not zero. This will not change anything in the end
> > > as AMD IOMMU disable swiotlb and properly associate itself with
> > 
> > Not sure how it disables SWIOTLB? The AMD Vi does not seem to
> > change 'swiotlb'. While 'gart_iommu_init' does. Did you mean
> > the AMD GART code?
> 
> So this is convoluted and painfull, each i look back at that it takes
> me time to figure out of thing happen. Basicly amd_iommu_init_dma_ops()
> will replace dma_ops to no_mmu unless passthrough, and when the AMD
> iommu associate itself with each device it will set the archdata.dma_ops
> again this unbind the default of swiotlb that is initialize before
> hw IOMMU.
> 
> > 
> > > devices even if detect() doesn't return a positive value.
> > 
> > Returning positive will mean that the pci_iommu_alloc will stop
> > processing _all_ other IOMMUs.
> >
> > While returning 0 will let it detect the other IOMMUs.
> 
> No see the IOMMU_FINISH_IF_DETECTED flags in pci_iommu_alloc().
> Which is not set for AMD hence my patch should not change anything
> it (AFAICT and from testing but i do not have all AMD hw the ever
> existed).
> 
> So i am just making the detect function do what the API doc says it
> should do. See line 72 to 80 of : arch/x86/include/asm/iommu_table.h
> 
> > 
> > Granted on an AMD machine there can be two 'IOMMU's - the GART
> > and the AMD Vi. The detection is always to call gart_iommu_hole_init
> > first, then amd_iommu_detect.
> > 
> > I presume if there was one more type on AMD we would run into trouble.
> 
> No because of IOMMU_FINISH_IF_DETECTED flag.
> 
> Hope this clarify thing this spagethi mix :)

Ok my bad amd actualy is using IOMMU_INIT_FINISH() so it finish before
trying other. Which make sense for AMD as AMD driver will call the gart
init gart_iommu_init() if it fails to initialize. If we ever end up with
a platform with multiple IOMMU beside AMD then we need to switch to the
IOMMU_INIT() instead of the finish one.

Cheers,
Jérôme

  parent reply	other threads:[~2015-10-27  0:53 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-31 22:13 [PATCH] iommu/amd: Fix amd_iommu_detect() (does not fix any issues) j.glisse-Re5JQEeQqe8AvxtiuMwx3w
2015-08-31 22:13 ` j.glisse
     [not found] ` <1441059183-9023-1-git-send-email-j.glisse-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-09-24 14:50   ` Joerg Roedel
2015-09-24 14:50     ` Joerg Roedel
2015-10-26 16:07   ` Konrad Rzeszutek Wilk
2015-10-26 16:07     ` Konrad Rzeszutek Wilk
2015-10-27  0:47     ` Jerome Glisse
2015-10-27  0:47       ` Jerome Glisse
     [not found]       ` <20151027004747.GA3569-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-10-27  0:53         ` Jerome Glisse [this message]
2015-10-27  0:53           ` Jerome Glisse
     [not found]           ` <20151027005329.GB3569-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2015-10-27 14:10             ` Konrad Rzeszutek Wilk
2015-10-27 14:10               ` Konrad Rzeszutek Wilk

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20151027005329.GB3569@gmail.com \
    --to=j.glisse-re5jqeeqqe8avxtiumwx3w@public.gmane.org \
    --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=jglisse-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=jroedel-l3A5Bk7waGM@public.gmane.org \
    --cc=konrad.wilk-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.