From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
To: Chunhe Lan <b25806@freescale.com>
Cc: linux-pci@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
Chunhe Lan <Chunhe.Lan@freescale.com>
Subject: Re: [PATCH] powerpc: dma-mapping: Return dma_direct_ops variable when dev == NULL
Date: Wed, 15 Jan 2014 14:47:37 +1100 [thread overview]
Message-ID: <1389757657.6933.54.camel@pasglop> (raw)
In-Reply-To: <52D60238.2040204@freescale.com>
On Wed, 2014-01-15 at 11:36 +0800, Chunhe Lan wrote:
> >
> >> Signed-off-by: Chunhe Lan <Chunhe.Lan@freescale.com>
> >> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> >> Tested-by: Chunhe Lan <Chunhe.Lan@freescale.com>
> >> ---
> >> arch/powerpc/include/asm/dma-mapping.h | 13 +++++++++----
> >> 1 files changed, 9 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/arch/powerpc/include/asm/dma-mapping.h b/arch/powerpc/include/asm/dma-mapping.h
> >> index e27e9ad..b8c10de 100644
> >> --- a/arch/powerpc/include/asm/dma-mapping.h
> >> +++ b/arch/powerpc/include/asm/dma-mapping.h
> >> @@ -84,10 +84,15 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev)
> I see the get_dma_ops function in
> arch/*x86*/include/asm/dma-mapping.h as the following:
>
> 32 static inline struct dma_map_ops *get_dma_ops(struct device *dev)
> 33 {
> 34 #ifndef CONFIG_X86_DEV_DMA_OPS
> 35 return dma_ops;
> 36 #else
> 37 if (unlikely(!dev) || !dev->archdata.dma_ops)
> 38 return dma_ops;
> 39 else
> 40 return dev->archdata.dma_ops;
> 41 #endif
> 42 }
>
> And also see the get_dma_ops function in
> arch/*arm*/include/asm/dma-mapping.h as the following:
>
> 18 static inline struct dma_map_ops *get_dma_ops(struct device *dev)
> 19 {
> 20 if (dev && dev->archdata.dma_ops)
> 21 return dev->archdata.dma_ops;
> 22 return &arm_dma_ops;
> 23 }
>
> Why not powerpc use this method to process dev == NULL ?
Because we don't :-) We used to and removed this. Due to how our HW
works it might not be correct. When an iommu is enabled for example
you simply cannot use the direct ops.
So the right fix is to properly establish the iommu for the VFs like
we do for the PFs.
> Thanks,
> -Chunhe
>
> >> * only ISA DMA device we support is the floppy and we have a hack
> >> * in the floppy driver directly to get a device for us.
> >> */
> >> - if (unlikely(dev == NULL))
> >> - return NULL;
> >> -
> >> - return dev->archdata.dma_ops;
> >> + if (dev && dev->archdata.dma_ops)
> >> + return dev->archdata.dma_ops;
> >> + /*
> >> + * In some cases (for example, use the Intel(R) 10 Gigabit PCI
> >> + * expression Virtual Function Network Driver -- ixgbevf.ko),
> >> + * their value of dev is the NULL. If return NULL, the driver is
> >> + * aborting. So return dma_direct_ops variable when dev == NULL.
> >> + */
> >> + return &dma_direct_ops;
> >> }
> >>
> >> static inline void set_dma_ops(struct device *dev, struct dma_map_ops *ops)
> >
> >
> >
>
>
prev parent reply other threads:[~2014-01-15 3:47 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-14 9:44 [PATCH] powerpc: dma-mapping: Return dma_direct_ops variable when dev == NULL Chunhe Lan
2014-01-14 10:14 ` Benjamin Herrenschmidt
2014-01-15 3:36 ` Chunhe Lan
2014-01-15 3:47 ` Benjamin Herrenschmidt [this message]
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=1389757657.6933.54.camel@pasglop \
--to=benh@kernel.crashing.org \
--cc=Chunhe.Lan@freescale.com \
--cc=b25806@freescale.com \
--cc=linux-pci@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).