Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ed3c6614 authored by Jan Beulich's avatar Jan Beulich Committed by Linus Torvalds
Browse files

iSCSI/iBFT: use proper address translation



In virtual environments (namely, Xen Dom0) virt <-> phys and
virt <-> isa-bus translations cannot be freely interchanged (and
even outside such environments it is not really correct to do so).
When looking at memory below 1M, the latter translations should
always be used.

iscsi_ibft_find.c part from: Martin Wilck <martin.wilck@ts.fujitsu.com>.

Signed-off-by: default avatarJan Beulich <jbeulich@novell.com>
Signed-off-by: default avatarPeter Jones <pjones@redhat.com>
Signed-off-by: default avatarKonrad Rzeszutek Wilk <ketuzsezs@darnok.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 41cb6654
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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)
+2 −2
Original line number Diff line number Diff line
@@ -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. */