* Re: [PATCH] Documentation: DMA-API: Clarify semantics of dma_set_mask_and_coherent
@ 2016-10-21 21:09 ` Jonathan Corbet
0 siblings, 0 replies; 12+ messages in thread
From: Jonathan Corbet @ 2016-10-21 21:09 UTC (permalink / raw)
To: Punit Agrawal
Cc: linux-doc, will.deacon, robin.murphy, linux-kernel,
linux-arm-kernel, arnd, joro, dwmw2
On Mon, 17 Oct 2016 16:26:23 +0100
Punit Agrawal <punit.agrawal@arm.com> wrote:
> The dma mapping api howto gives the impression that using the
> dma_set_mask_and_coherent (and related DMA APIs) will cause the kernel
> to check all the components in the path from the device to memory for
> addressing restrictions. In systems with address translations between
> the device and memory (e.g., when using IOMMU), this implies that a
> successful call to set set dma mask has checked the addressing
> constraints of the intermediaries as well.
>
> For the IOMMU drivers in the tree, the check is actually performed while
> allocating the DMA buffer rather than when the DMA mask is
> configured. For MMUs that do not support the full device addressing
> capability, the allocations are made from a reduced address space.
>
> Update the documentation to clarify that even though the call to
> dma_set_mask_and_coherent succeeds, it may not be possible to use the
> full addressing capability of the device.
OK, so I guess I can buy this. But...
> Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
> Cc: Jonathan Corbet <corbet@lwn.net>
> ---
> Documentation/DMA-API-HOWTO.txt | 39 +++++++++++++++++++++++----------------
> 1 file changed, 23 insertions(+), 16 deletions(-)
>
> diff --git a/Documentation/DMA-API-HOWTO.txt b/Documentation/DMA-API-HOWTO.txt
> index 979228b..240d1ee 100644
> --- a/Documentation/DMA-API-HOWTO.txt
> +++ b/Documentation/DMA-API-HOWTO.txt
> @@ -159,39 +159,46 @@ support 64-bit addressing (DAC) for all transactions. And at least
> one platform (SGI SN2) requires 64-bit consistent allocations to
> operate correctly when the IO bus is in PCI-X mode.
>
> -For correct operation, you must interrogate the kernel in your device
> -probe routine to see if the DMA controller on the machine can properly
> -support the DMA addressing limitation your device has. It is good
> +For correct operation, you must inform the kernel in your device probe
> +routine to see if the DMA controller on the machine can properly
> +support the DMA addressing capabilities your device has. It is good
Here it's still saying "to see if the DMA controller on the machine can
properly support the DMA addressing capabilities your device has". So
you've not really changed the sense of this sentence here.
If I understand things correctly, the calls in question are storing the
device's limitations; they will only fail if the kernel is entirely
unable to work within the indicated range, right? I don't think there's
ever been any guarantee that the system as a whole could use the entire
range that is addressable by the device. I have no objection to making
that more clear, but let's actually make it more clear by saying what the
functions are actually doing.
Make sense, or am I missing something here?
Thanks,
jon
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] Documentation: DMA-API: Clarify semantics of dma_set_mask_and_coherent
2016-10-21 21:09 ` Jonathan Corbet
@ 2016-10-24 11:08 ` Joerg Roedel
-1 siblings, 0 replies; 12+ messages in thread
From: Joerg Roedel @ 2016-10-24 11:08 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Oct 21, 2016 at 03:09:16PM -0600, Jonathan Corbet wrote:
> On Mon, 17 Oct 2016 16:26:23 +0100
> Punit Agrawal <punit.agrawal@arm.com> wrote:
>
> > The dma mapping api howto gives the impression that using the
> > dma_set_mask_and_coherent (and related DMA APIs) will cause the kernel
> > to check all the components in the path from the device to memory for
> > addressing restrictions. In systems with address translations between
> > the device and memory (e.g., when using IOMMU), this implies that a
> > successful call to set set dma mask has checked the addressing
> > constraints of the intermediaries as well.
This is basically true when you have DMA controllers in the path from
device to memory. But it is not true for IOMMUs, because IOMMU drivers
are consumers of the dma-masks, they don't really restrict them. An
IOMMU driver knows the limitations of IOMMU hardware and counts that in
when allocating an address for a dma-buffer.
So long story short: Any IOMMU restrictions in address space size don't
need to be represented in the dma-mask for a device.
Joerg
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Documentation: DMA-API: Clarify semantics of dma_set_mask_and_coherent
@ 2016-10-24 11:08 ` Joerg Roedel
0 siblings, 0 replies; 12+ messages in thread
From: Joerg Roedel @ 2016-10-24 11:08 UTC (permalink / raw)
To: Jonathan Corbet
Cc: Punit Agrawal, linux-doc, will.deacon, robin.murphy, linux-kernel,
linux-arm-kernel, arnd, dwmw2
On Fri, Oct 21, 2016 at 03:09:16PM -0600, Jonathan Corbet wrote:
> On Mon, 17 Oct 2016 16:26:23 +0100
> Punit Agrawal <punit.agrawal@arm.com> wrote:
>
> > The dma mapping api howto gives the impression that using the
> > dma_set_mask_and_coherent (and related DMA APIs) will cause the kernel
> > to check all the components in the path from the device to memory for
> > addressing restrictions. In systems with address translations between
> > the device and memory (e.g., when using IOMMU), this implies that a
> > successful call to set set dma mask has checked the addressing
> > constraints of the intermediaries as well.
This is basically true when you have DMA controllers in the path from
device to memory. But it is not true for IOMMUs, because IOMMU drivers
are consumers of the dma-masks, they don't really restrict them. An
IOMMU driver knows the limitations of IOMMU hardware and counts that in
when allocating an address for a dma-buffer.
So long story short: Any IOMMU restrictions in address space size don't
need to be represented in the dma-mask for a device.
Joerg
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] Documentation: DMA-API: Clarify semantics of dma_set_mask_and_coherent
2016-10-24 11:08 ` Joerg Roedel
@ 2016-10-24 11:37 ` Punit Agrawal
-1 siblings, 0 replies; 12+ messages in thread
From: Punit Agrawal @ 2016-10-24 11:37 UTC (permalink / raw)
To: linux-arm-kernel
Joerg Roedel <joro@8bytes.org> writes:
> On Fri, Oct 21, 2016 at 03:09:16PM -0600, Jonathan Corbet wrote:
>> On Mon, 17 Oct 2016 16:26:23 +0100
>> Punit Agrawal <punit.agrawal@arm.com> wrote:
>>
>> > The dma mapping api howto gives the impression that using the
>> > dma_set_mask_and_coherent (and related DMA APIs) will cause the kernel
>> > to check all the components in the path from the device to memory for
>> > addressing restrictions. In systems with address translations between
>> > the device and memory (e.g., when using IOMMU), this implies that a
>> > successful call to set set dma mask has checked the addressing
>> > constraints of the intermediaries as well.
>
> This is basically true when you have DMA controllers in the path from
> device to memory. But it is not true for IOMMUs, because IOMMU drivers
> are consumers of the dma-masks, they don't really restrict them. An
> IOMMU driver knows the limitations of IOMMU hardware and counts that in
> when allocating an address for a dma-buffer.
Yes, that's what I'd found looking at the IOMMU drivers in the tree.
>
> So long story short: Any IOMMU restrictions in address space size don't
> need to be represented in the dma-mask for a device.
That was another rabbit hole I'd spend some time in - whether IOMMU
restrictions need to be factored into the dma_mask for devices.
As size(dma_mask) > size(iommu supported address size) still works, I
came to the conclusion that the documentation can maybe help clarify
this.
This patch is an attempt to update the documentation to inform the user
that even if the dma_set_mask call succeeds, the system may still not
use the entire device address space.
Thanks for clarifying a few of my doubts.
Punit
>
>
>
> Joerg
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Documentation: DMA-API: Clarify semantics of dma_set_mask_and_coherent
@ 2016-10-24 11:37 ` Punit Agrawal
0 siblings, 0 replies; 12+ messages in thread
From: Punit Agrawal @ 2016-10-24 11:37 UTC (permalink / raw)
To: Joerg Roedel
Cc: Jonathan Corbet, linux-doc, will.deacon, robin.murphy,
linux-kernel, linux-arm-kernel, arnd, dwmw2
Joerg Roedel <joro@8bytes.org> writes:
> On Fri, Oct 21, 2016 at 03:09:16PM -0600, Jonathan Corbet wrote:
>> On Mon, 17 Oct 2016 16:26:23 +0100
>> Punit Agrawal <punit.agrawal@arm.com> wrote:
>>
>> > The dma mapping api howto gives the impression that using the
>> > dma_set_mask_and_coherent (and related DMA APIs) will cause the kernel
>> > to check all the components in the path from the device to memory for
>> > addressing restrictions. In systems with address translations between
>> > the device and memory (e.g., when using IOMMU), this implies that a
>> > successful call to set set dma mask has checked the addressing
>> > constraints of the intermediaries as well.
>
> This is basically true when you have DMA controllers in the path from
> device to memory. But it is not true for IOMMUs, because IOMMU drivers
> are consumers of the dma-masks, they don't really restrict them. An
> IOMMU driver knows the limitations of IOMMU hardware and counts that in
> when allocating an address for a dma-buffer.
Yes, that's what I'd found looking at the IOMMU drivers in the tree.
>
> So long story short: Any IOMMU restrictions in address space size don't
> need to be represented in the dma-mask for a device.
That was another rabbit hole I'd spend some time in - whether IOMMU
restrictions need to be factored into the dma_mask for devices.
As size(dma_mask) > size(iommu supported address size) still works, I
came to the conclusion that the documentation can maybe help clarify
this.
This patch is an attempt to update the documentation to inform the user
that even if the dma_set_mask call succeeds, the system may still not
use the entire device address space.
Thanks for clarifying a few of my doubts.
Punit
>
>
>
> Joerg
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] Documentation: DMA-API: Clarify semantics of dma_set_mask_and_coherent
2016-10-21 21:09 ` Jonathan Corbet
@ 2016-10-24 11:51 ` Punit Agrawal
-1 siblings, 0 replies; 12+ messages in thread
From: Punit Agrawal @ 2016-10-24 11:51 UTC (permalink / raw)
To: linux-arm-kernel
Jonathan Corbet <corbet@lwn.net> writes:
> On Mon, 17 Oct 2016 16:26:23 +0100
> Punit Agrawal <punit.agrawal@arm.com> wrote:
>
>> The dma mapping api howto gives the impression that using the
>> dma_set_mask_and_coherent (and related DMA APIs) will cause the kernel
>> to check all the components in the path from the device to memory for
>> addressing restrictions. In systems with address translations between
>> the device and memory (e.g., when using IOMMU), this implies that a
>> successful call to set set dma mask has checked the addressing
>> constraints of the intermediaries as well.
>>
>> For the IOMMU drivers in the tree, the check is actually performed while
>> allocating the DMA buffer rather than when the DMA mask is
>> configured. For MMUs that do not support the full device addressing
>> capability, the allocations are made from a reduced address space.
>>
>> Update the documentation to clarify that even though the call to
>> dma_set_mask_and_coherent succeeds, it may not be possible to use the
>> full addressing capability of the device.
>
> OK, so I guess I can buy this. But...
>
>> Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
>> Cc: Jonathan Corbet <corbet@lwn.net>
>> ---
>> Documentation/DMA-API-HOWTO.txt | 39 +++++++++++++++++++++++----------------
>> 1 file changed, 23 insertions(+), 16 deletions(-)
>>
>> diff --git a/Documentation/DMA-API-HOWTO.txt b/Documentation/DMA-API-HOWTO.txt
>> index 979228b..240d1ee 100644
>> --- a/Documentation/DMA-API-HOWTO.txt
>> +++ b/Documentation/DMA-API-HOWTO.txt
>> @@ -159,39 +159,46 @@ support 64-bit addressing (DAC) for all transactions. And at least
>> one platform (SGI SN2) requires 64-bit consistent allocations to
>> operate correctly when the IO bus is in PCI-X mode.
>>
>> -For correct operation, you must interrogate the kernel in your device
>> -probe routine to see if the DMA controller on the machine can properly
>> -support the DMA addressing limitation your device has. It is good
>> +For correct operation, you must inform the kernel in your device probe
>> +routine to see if the DMA controller on the machine can properly
>> +support the DMA addressing capabilities your device has. It is good
>
> Here it's still saying "to see if the DMA controller on the machine can
> properly support the DMA addressing capabilities your device has". So
> you've not really changed the sense of this sentence here.
You're right - the changes don't go far enough.
How about dropping the bit so that it now reads -
"For correct operation, in your device probe routine, you must inform
the DMA addressing capabilities of your device to the kernel."
>
> If I understand things correctly, the calls in question are storing the
> device's limitations; they will only fail if the kernel is entirely
> unable to work within the indicated range, right? I don't think there's
> ever been any guarantee that the system as a whole could use the entire
> range that is addressable by the device.
That matches my understanding as well. I was just trying to make it more
explicit with this patch.
> I have no objection to making
> that more clear, but let's actually make it more clear by saying what the
> functions are actually doing.
>
> Make sense, or am I missing something here?
Let me know if the change I suggest is an improvement and I'll send out
a v2.
Thanks,
Punit
>
> Thanks,
>
> jon
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Documentation: DMA-API: Clarify semantics of dma_set_mask_and_coherent
@ 2016-10-24 11:51 ` Punit Agrawal
0 siblings, 0 replies; 12+ messages in thread
From: Punit Agrawal @ 2016-10-24 11:51 UTC (permalink / raw)
To: Jonathan Corbet
Cc: linux-doc, will.deacon, robin.murphy, linux-kernel,
linux-arm-kernel, arnd, joro, dwmw2
Jonathan Corbet <corbet@lwn.net> writes:
> On Mon, 17 Oct 2016 16:26:23 +0100
> Punit Agrawal <punit.agrawal@arm.com> wrote:
>
>> The dma mapping api howto gives the impression that using the
>> dma_set_mask_and_coherent (and related DMA APIs) will cause the kernel
>> to check all the components in the path from the device to memory for
>> addressing restrictions. In systems with address translations between
>> the device and memory (e.g., when using IOMMU), this implies that a
>> successful call to set set dma mask has checked the addressing
>> constraints of the intermediaries as well.
>>
>> For the IOMMU drivers in the tree, the check is actually performed while
>> allocating the DMA buffer rather than when the DMA mask is
>> configured. For MMUs that do not support the full device addressing
>> capability, the allocations are made from a reduced address space.
>>
>> Update the documentation to clarify that even though the call to
>> dma_set_mask_and_coherent succeeds, it may not be possible to use the
>> full addressing capability of the device.
>
> OK, so I guess I can buy this. But...
>
>> Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
>> Cc: Jonathan Corbet <corbet@lwn.net>
>> ---
>> Documentation/DMA-API-HOWTO.txt | 39 +++++++++++++++++++++++----------------
>> 1 file changed, 23 insertions(+), 16 deletions(-)
>>
>> diff --git a/Documentation/DMA-API-HOWTO.txt b/Documentation/DMA-API-HOWTO.txt
>> index 979228b..240d1ee 100644
>> --- a/Documentation/DMA-API-HOWTO.txt
>> +++ b/Documentation/DMA-API-HOWTO.txt
>> @@ -159,39 +159,46 @@ support 64-bit addressing (DAC) for all transactions. And at least
>> one platform (SGI SN2) requires 64-bit consistent allocations to
>> operate correctly when the IO bus is in PCI-X mode.
>>
>> -For correct operation, you must interrogate the kernel in your device
>> -probe routine to see if the DMA controller on the machine can properly
>> -support the DMA addressing limitation your device has. It is good
>> +For correct operation, you must inform the kernel in your device probe
>> +routine to see if the DMA controller on the machine can properly
>> +support the DMA addressing capabilities your device has. It is good
>
> Here it's still saying "to see if the DMA controller on the machine can
> properly support the DMA addressing capabilities your device has". So
> you've not really changed the sense of this sentence here.
You're right - the changes don't go far enough.
How about dropping the bit so that it now reads -
"For correct operation, in your device probe routine, you must inform
the DMA addressing capabilities of your device to the kernel."
>
> If I understand things correctly, the calls in question are storing the
> device's limitations; they will only fail if the kernel is entirely
> unable to work within the indicated range, right? I don't think there's
> ever been any guarantee that the system as a whole could use the entire
> range that is addressable by the device.
That matches my understanding as well. I was just trying to make it more
explicit with this patch.
> I have no objection to making
> that more clear, but let's actually make it more clear by saying what the
> functions are actually doing.
>
> Make sense, or am I missing something here?
Let me know if the change I suggest is an improvement and I'll send out
a v2.
Thanks,
Punit
>
> Thanks,
>
> jon
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH] Documentation: DMA-API: Clarify semantics of dma_set_mask_and_coherent
2016-10-21 21:09 ` Jonathan Corbet
@ 2016-10-24 14:44 ` Arnd Bergmann
-1 siblings, 0 replies; 12+ messages in thread
From: Arnd Bergmann @ 2016-10-24 14:44 UTC (permalink / raw)
To: linux-arm-kernel
On Friday, October 21, 2016 3:09:16 PM CEST Jonathan Corbet wrote:
> On Mon, 17 Oct 2016 16:26:23 +0100
> Punit Agrawal <punit.agrawal@arm.com> wrote:
>
> > The dma mapping api howto gives the impression that using the
> > dma_set_mask_and_coherent (and related DMA APIs) will cause the kernel
> > to check all the components in the path from the device to memory for
> > addressing restrictions. In systems with address translations between
> > the device and memory (e.g., when using IOMMU), this implies that a
> > successful call to set set dma mask has checked the addressing
> > constraints of the intermediaries as well.
> >
> > For the IOMMU drivers in the tree, the check is actually performed while
> > allocating the DMA buffer rather than when the DMA mask is
> > configured. For MMUs that do not support the full device addressing
> > capability, the allocations are made from a reduced address space.
> >
> > Update the documentation to clarify that even though the call to
> > dma_set_mask_and_coherent succeeds, it may not be possible to use the
> > full addressing capability of the device.
>
> OK, so I guess I can buy this. But...
>
> > Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
> > Cc: Jonathan Corbet <corbet@lwn.net>
> > ---
> > Documentation/DMA-API-HOWTO.txt | 39 +++++++++++++++++++++++----------------
> > 1 file changed, 23 insertions(+), 16 deletions(-)
> >
> > diff --git a/Documentation/DMA-API-HOWTO.txt b/Documentation/DMA-API-HOWTO.txt
> > index 979228b..240d1ee 100644
> > --- a/Documentation/DMA-API-HOWTO.txt
> > +++ b/Documentation/DMA-API-HOWTO.txt
> > @@ -159,39 +159,46 @@ support 64-bit addressing (DAC) for all transactions. And at least
> > one platform (SGI SN2) requires 64-bit consistent allocations to
> > operate correctly when the IO bus is in PCI-X mode.
> >
> > -For correct operation, you must interrogate the kernel in your device
> > -probe routine to see if the DMA controller on the machine can properly
> > -support the DMA addressing limitation your device has. It is good
> > +For correct operation, you must inform the kernel in your device probe
> > +routine to see if the DMA controller on the machine can properly
> > +support the DMA addressing capabilities your device has. It is good
>
> Here it's still saying "to see if the DMA controller on the machine can
> properly support the DMA addressing capabilities your device has". So
> you've not really changed the sense of this sentence here.
>
> If I understand things correctly, the calls in question are storing the
> device's limitations; they will only fail if the kernel is entirely
> unable to work within the indicated range, right? I don't think there's
> ever been any guarantee that the system as a whole could use the entire
> range that is addressable by the device. I have no objection to making
> that more clear, but let's actually make it more clear by saying what the
> functions are actually doing.
>
> Make sense, or am I missing something here?
The call is a two-way interface, and the existing text tries to convey
that already: The device tells the kernel whether it is limited (< 32
bit mask) or if it can support extended addresses (> 32 bit mask),
or just handles the default 32bit mask, and the kernel should come
back saying whether that mask allows a correct operation of the device
on the given platform, as well as set it up correctly that way.
What exactly happens in dma_set_mask() and the related interfaces
is highly platform specific, including:
- if the mask is smaller than the smallest memory zone and the
swiotlb bounce buffers (if any) don't fit inside it, it has to
fail
- if the device claims to support larger mask, but the bus it
connects to does not (e.g. a 32-bit PCI host), it may
also fail (or succeed if there is no RAM outside of the
intersection of the two masks)
- if the mask is large enough to cover all RAM, we can bypass
the IOMMU and use a direct mapping
- if swiotlb is enabled or an IOMMU is present, any mask that
includes the bounce buffer area (or the virtual address space
of the IOMMU) should succeed.
Arnd
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH] Documentation: DMA-API: Clarify semantics of dma_set_mask_and_coherent
@ 2016-10-24 14:44 ` Arnd Bergmann
0 siblings, 0 replies; 12+ messages in thread
From: Arnd Bergmann @ 2016-10-24 14:44 UTC (permalink / raw)
To: linux-arm-kernel
Cc: Jonathan Corbet, Punit Agrawal, linux-doc, dwmw2, joro,
will.deacon, linux-kernel, robin.murphy
On Friday, October 21, 2016 3:09:16 PM CEST Jonathan Corbet wrote:
> On Mon, 17 Oct 2016 16:26:23 +0100
> Punit Agrawal <punit.agrawal@arm.com> wrote:
>
> > The dma mapping api howto gives the impression that using the
> > dma_set_mask_and_coherent (and related DMA APIs) will cause the kernel
> > to check all the components in the path from the device to memory for
> > addressing restrictions. In systems with address translations between
> > the device and memory (e.g., when using IOMMU), this implies that a
> > successful call to set set dma mask has checked the addressing
> > constraints of the intermediaries as well.
> >
> > For the IOMMU drivers in the tree, the check is actually performed while
> > allocating the DMA buffer rather than when the DMA mask is
> > configured. For MMUs that do not support the full device addressing
> > capability, the allocations are made from a reduced address space.
> >
> > Update the documentation to clarify that even though the call to
> > dma_set_mask_and_coherent succeeds, it may not be possible to use the
> > full addressing capability of the device.
>
> OK, so I guess I can buy this. But...
>
> > Signed-off-by: Punit Agrawal <punit.agrawal@arm.com>
> > Cc: Jonathan Corbet <corbet@lwn.net>
> > ---
> > Documentation/DMA-API-HOWTO.txt | 39 +++++++++++++++++++++++----------------
> > 1 file changed, 23 insertions(+), 16 deletions(-)
> >
> > diff --git a/Documentation/DMA-API-HOWTO.txt b/Documentation/DMA-API-HOWTO.txt
> > index 979228b..240d1ee 100644
> > --- a/Documentation/DMA-API-HOWTO.txt
> > +++ b/Documentation/DMA-API-HOWTO.txt
> > @@ -159,39 +159,46 @@ support 64-bit addressing (DAC) for all transactions. And at least
> > one platform (SGI SN2) requires 64-bit consistent allocations to
> > operate correctly when the IO bus is in PCI-X mode.
> >
> > -For correct operation, you must interrogate the kernel in your device
> > -probe routine to see if the DMA controller on the machine can properly
> > -support the DMA addressing limitation your device has. It is good
> > +For correct operation, you must inform the kernel in your device probe
> > +routine to see if the DMA controller on the machine can properly
> > +support the DMA addressing capabilities your device has. It is good
>
> Here it's still saying "to see if the DMA controller on the machine can
> properly support the DMA addressing capabilities your device has". So
> you've not really changed the sense of this sentence here.
>
> If I understand things correctly, the calls in question are storing the
> device's limitations; they will only fail if the kernel is entirely
> unable to work within the indicated range, right? I don't think there's
> ever been any guarantee that the system as a whole could use the entire
> range that is addressable by the device. I have no objection to making
> that more clear, but let's actually make it more clear by saying what the
> functions are actually doing.
>
> Make sense, or am I missing something here?
The call is a two-way interface, and the existing text tries to convey
that already: The device tells the kernel whether it is limited (< 32
bit mask) or if it can support extended addresses (> 32 bit mask),
or just handles the default 32bit mask, and the kernel should come
back saying whether that mask allows a correct operation of the device
on the given platform, as well as set it up correctly that way.
What exactly happens in dma_set_mask() and the related interfaces
is highly platform specific, including:
- if the mask is smaller than the smallest memory zone and the
swiotlb bounce buffers (if any) don't fit inside it, it has to
fail
- if the device claims to support larger mask, but the bus it
connects to does not (e.g. a 32-bit PCI host), it may
also fail (or succeed if there is no RAM outside of the
intersection of the two masks)
- if the mask is large enough to cover all RAM, we can bypass
the IOMMU and use a direct mapping
- if swiotlb is enabled or an IOMMU is present, any mask that
includes the bounce buffer area (or the virtual address space
of the IOMMU) should succeed.
Arnd
^ permalink raw reply [flat|nested] 12+ messages in thread