From: jonathan.derrick@intel.com (Jon Derrick)
Subject: phys_addr_t instead of dma_addr_t for nvme_dev->cmb_dma_addr
Date: Mon, 9 Jan 2017 14:54:23 -0700 [thread overview]
Message-ID: <20170109215422.GA5286@localhost.localdomain> (raw)
In-Reply-To: <0846672a-484d-ab80-aa1c-751042405f29@mellanox.com>
On Sun, Jan 08, 2017@10:55:28AM +0200, Haggai Eran wrote:
> On 1/5/2017 8:39 PM, Jon Derrick wrote:
> >> Perhaps I'm mistaken, but shouldn't the code use pcibios_resource_to_bus()
> >> in this case to convert the resource to bus addresses? I see cmb_dma_addr
> >> is later passed directly to the device as the sq_dma_addr.
> >>
> > That gets us a region from a window within a larger region, but to me it
> > looks to me like resource_contains() would fail to match if the CMB
> > region went beyond the window.
> I thought that the CMB must fit in its BAR, and therefore in the window that
> contains it. Isn't it so?
>
The spec is unclear if it's the host's responsibility to stay within the
BAR, or the device's to reduce CMBLOC and CMBSZ to fit:
"If the Offset + Size exceeds the length of
the indicated BAR, the size available to the host is limited by the
length of the BAR."
I think this would only happen if we're behind a bridge with a smaller
window than BAR.
> > There's another option - pci_bus_addr_t/pci_bus_region takes the largest
> > of phys_addr_t's width and dma_addr_t's width. So in the cases where
> > those two types might differ it should still be able to hold a valid
> > physical address, which is what both the resource API and Create-SQes
> > expect.
> I don't think the issue is just the width of the types. What happens on
> architectures where phy_addr_t addresses are translated before going to
> the PCIe bus?
If we have a DMA translation, we get the host side addresses from the
ioremapping and I believe the device is still expecting the untranslated
addresses, since it needs to DMA over the fabric. Do archs exists that
don't fit this model?
>
> Regards,
> Haggai
Cheers
next prev parent reply other threads:[~2017-01-09 21:54 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-05 10:20 phys_addr_t instead of dma_addr_t for nvme_dev->cmb_dma_addr Max Gurtovoy
2017-01-05 11:02 ` Haggai Eran
2017-01-05 18:39 ` Jon Derrick
2017-01-08 8:55 ` Haggai Eran
2017-01-09 21:54 ` Jon Derrick [this message]
2017-01-11 8:15 ` Haggai Eran
2017-01-11 9:06 ` hch
2017-01-11 15:36 ` Jon Derrick
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=20170109215422.GA5286@localhost.localdomain \
--to=jonathan.derrick@intel.com \
/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.