2009-10-01 08:01:15

by Jan Beulich

[permalink] [raw]
Subject: [PATCH] iSCSI/iBFT: use proper address translation

In virtual environments (namely, Xen Dom0) virt <-> phys and
virt <-> isa-bus translations cannot be freely interchanged. When
looking at memory below 1M, the latter translations should always
be used.

iscsi_ibft_find.c part from: Martin Wilck <[email protected]>.

Signed-off-by: Jan Beulich <[email protected]>
Cc: Jeremy Fitzhardinge <[email protected]>

---
drivers/firmware/iscsi_ibft.c | 2 +-
drivers/firmware/iscsi_ibft_find.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)

--- linux-2.6.32-rc1/drivers/firmware/iscsi_ibft.c 2009-06-10 05:05:27.000000000 +0200
+++ 2.6.32-rc1-ibft-addr-xlat/drivers/firmware/iscsi_ibft.c 2009-09-24 12:14:48.000000000 +0200
@@ -939,7 +939,7 @@ static int __init ibft_init(void)

if (ibft_addr) {
printk(KERN_INFO "iBFT detected at 0x%llx.\n",
- (u64)virt_to_phys((void *)ibft_addr));
+ (u64)isa_virt_to_bus(ibft_addr));

rc = ibft_check_device();
if (rc)
--- linux-2.6.32-rc1/drivers/firmware/iscsi_ibft_find.c 2008-10-10 00:13:53.000000000 +0200
+++ 2.6.32-rc1-ibft-addr-xlat/drivers/firmware/iscsi_ibft_find.c 2009-09-24 09:52:18.000000000 +0200
@@ -65,10 +65,10 @@ void __init reserve_ibft_region(void)
* so skip that area */
if (pos == VGA_MEM)
pos += VGA_SIZE;
- virt = phys_to_virt(pos);
+ virt = isa_bus_to_virt(pos);
if (memcmp(virt, IBFT_SIGN, IBFT_SIGN_LEN) == 0) {
unsigned long *addr =
- (unsigned long *)phys_to_virt(pos + 4);
+ (unsigned long *)isa_bus_to_virt(pos + 4);
len = *addr;
/* if the length of the table extends past 1M,
* the table cannot be valid. */



2009-10-01 13:36:11

by Peter Jones

[permalink] [raw]
Subject: Re: [PATCH] iSCSI/iBFT: use proper address translation

On 10/01/2009 04:01 AM, Jan Beulich wrote:
> In virtual environments (namely, Xen Dom0) virt <-> phys and
> virt <-> isa-bus translations cannot be freely interchanged. When
> looking at memory below 1M, the latter translations should always
> be used.
>
> iscsi_ibft_find.c part from: Martin Wilck <[email protected]>.
>
> Signed-off-by: Jan Beulich <[email protected]>
> Cc: Jeremy Fitzhardinge <[email protected]>

Looks good to me.

Signed-off-by: Peter Jones <[email protected]>

>
> ---
> drivers/firmware/iscsi_ibft.c | 2 +-
> drivers/firmware/iscsi_ibft_find.c | 4 ++--
> 2 files changed, 3 insertions(+), 3 deletions(-)
>
> --- linux-2.6.32-rc1/drivers/firmware/iscsi_ibft.c 2009-06-10 05:05:27.000000000 +0200
> +++ 2.6.32-rc1-ibft-addr-xlat/drivers/firmware/iscsi_ibft.c 2009-09-24 12:14:48.000000000 +0200
> @@ -939,7 +939,7 @@ static int __init ibft_init(void)
>
> if (ibft_addr) {
> printk(KERN_INFO "iBFT detected at 0x%llx.\n",
> - (u64)virt_to_phys((void *)ibft_addr));
> + (u64)isa_virt_to_bus(ibft_addr));
>
> rc = ibft_check_device();
> if (rc)
> --- linux-2.6.32-rc1/drivers/firmware/iscsi_ibft_find.c 2008-10-10 00:13:53.000000000 +0200
> +++ 2.6.32-rc1-ibft-addr-xlat/drivers/firmware/iscsi_ibft_find.c 2009-09-24 09:52:18.000000000 +0200
> @@ -65,10 +65,10 @@ void __init reserve_ibft_region(void)
> * so skip that area */
> if (pos == VGA_MEM)
> pos += VGA_SIZE;
> - virt = phys_to_virt(pos);
> + virt = isa_bus_to_virt(pos);
> if (memcmp(virt, IBFT_SIGN, IBFT_SIGN_LEN) == 0) {
> unsigned long *addr =
> - (unsigned long *)phys_to_virt(pos + 4);
> + (unsigned long *)isa_bus_to_virt(pos + 4);
> len = *addr;
> /* if the length of the table extends past 1M,
> * the table cannot be valid. */
>
>
>


--
Peter

When privacy is outlawed only outlaws will have privacy.
-- Zimmermann

2009-10-01 21:56:30

by Jeremy Fitzhardinge

[permalink] [raw]
Subject: Re: [PATCH] iSCSI/iBFT: use proper address translation

On 10/01/09 01:01, Jan Beulich wrote:
> In virtual environments (namely, Xen Dom0) virt <-> phys and
> virt <-> isa-bus translations cannot be freely interchanged. When
> looking at memory below 1M, the latter translations should always
> be used.
>

Do you have a different definition for isa_virt_to_bus in your kernel?
As far as I can see it is defined to be the same as virt_to_phys. Also,
the ISA memory is identity mapped into the domain's physical mapping
space, so it should be directly accessible without any problems.

J

2009-10-02 01:37:39

by Konrad Rzeszutek Wilk

[permalink] [raw]
Subject: Re: [PATCH] iSCSI/iBFT: use proper address translation

On Thu, Oct 01, 2009 at 02:46:52PM -0700, Jeremy Fitzhardinge wrote:
> On 10/01/09 01:01, Jan Beulich wrote:
> > In virtual environments (namely, Xen Dom0) virt <-> phys and
> > virt <-> isa-bus translations cannot be freely interchanged. When
> > looking at memory below 1M, the latter translations should always
> > be used.
> >
>
> Do you have a different definition for isa_virt_to_bus in your kernel?
> As far as I can see it is defined to be the same as virt_to_phys. Also,
> the ISA memory is identity mapped into the domain's physical mapping
> space, so it should be directly accessible without any problems.

The issue as I've come to understand is that the virt_to_phys on
memory below the 1MB does not work. Alex suggested another fix which
ioremap's the iBFT region, but I think this patch by Martin does the same job.

Either way, it looks good to me.

Signed-off-by: Konrad Rzeszutek Wilk <[email protected]>

2009-10-02 07:23:28

by Jan Beulich

[permalink] [raw]
Subject: Re: [PATCH] iSCSI/iBFT: use proper address translation

>>> Jeremy Fitzhardinge <[email protected]> 01.10.09 23:46 >>>
>On 10/01/09 01:01, Jan Beulich wrote:
>> In virtual environments (namely, Xen Dom0) virt <-> phys and
>> virt <-> isa-bus translations cannot be freely interchanged. When
>> looking at memory below 1M, the latter translations should always
>> be used.
>>
>
>Do you have a different definition for isa_virt_to_bus in your kernel?
>As far as I can see it is defined to be the same as virt_to_phys. Also,
>the ISA memory is identity mapped into the domain's physical mapping
>space, so it should be directly accessible without any problems.

I wasn't sure if this is an issue in the pv-ops kernel, so I copied you just
in case. Yes, we do have a different virt<->isa_bus translation, but
the point of the patch really is that virt<->phys translations are
incorrectly being used here regardless of the underlying environment.

Jan

2009-10-02 07:25:40

by Jan Beulich

[permalink] [raw]
Subject: Re: [PATCH] iSCSI/iBFT: use proper address translation

>>> Konrad Rzeszutek <[email protected]> 02.10.09 03:28 >>>
>The issue as I've come to understand is that the virt_to_phys on
>memory below the 1MB does not work. Alex suggested another fix which
>ioremap's the iBFT region, but I think this patch by Martin does the same job.
>
>Either way, it looks good to me.
>
>Signed-off-by: Konrad Rzeszutek Wilk <[email protected]>

With both ofyou having signed off on it - who's going to push this to
Linus? I'm specifically asking in case I'm expected to.

Jan

2009-10-02 14:33:28

by Peter Jones

[permalink] [raw]
Subject: Re: [PATCH] iSCSI/iBFT: use proper address translation

On 10/02/2009 03:25 AM, Jan Beulich wrote:
>>>> Konrad Rzeszutek<[email protected]> 02.10.09 03:28>>>
>> The issue as I've come to understand is that the virt_to_phys on
>> memory below the 1MB does not work. Alex suggested another fix which
>> ioremap's the iBFT region, but I think this patch by Martin does the same job.
>>
>> Either way, it looks good to me.
>>
>> Signed-off-by: Konrad Rzeszutek Wilk<[email protected]>
>
> With both ofyou having signed off on it - who's going to push this to
> Linus? I'm specifically asking in case I'm expected to.

Not sure how that's supposed to work, but I'm cool with you doing it ;)

2009-10-02 14:58:44

by Konrad Rzeszutek Wilk

[permalink] [raw]
Subject: Re: [PATCH] iSCSI/iBFT: use proper address translation

On Fri, Oct 02, 2009 at 10:32:03AM -0400, Peter Jones wrote:
> On 10/02/2009 03:25 AM, Jan Beulich wrote:
> >>>>Konrad Rzeszutek<[email protected]> 02.10.09 03:28>>>
> >>The issue as I've come to understand is that the virt_to_phys on
> >>memory below the 1MB does not work. Alex suggested another fix which
> >>ioremap's the iBFT region, but I think this patch by Martin does the same
> >>job.
> >>
> >>Either way, it looks good to me.
> >>
> >>Signed-off-by: Konrad Rzeszutek Wilk<[email protected]>
> >
> >With both ofyou having signed off on it - who's going to push this to
> >Linus? I'm specifically asking in case I'm expected to.
>
> Not sure how that's supposed to work, but I'm cool with you doing it ;)

Yeah me too :-)

P.S.
In the past I pushed it off to Greg KH and/or Mike Christie.