提交 ed3c6614 编写于 作者: J Jan Beulich 提交者: Linus Torvalds

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: NJan Beulich <jbeulich@novell.com>
Signed-off-by: NPeter Jones <pjones@redhat.com>
Signed-off-by: NKonrad Rzeszutek Wilk <ketuzsezs@darnok.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 41cb6654
......@@ -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)
......
......@@ -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. */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册