aboutsummaryrefslogtreecommitdiffstats
path: root/xenolinux-2.4.16-sparse/arch
diff options
context:
space:
mode:
authorkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>2003-02-19 20:26:12 +0000
committerkaf24@labyrinth.cl.cam.ac.uk <kaf24@labyrinth.cl.cam.ac.uk>2003-02-19 20:26:12 +0000
commita2104601f3481d9b1253f2a28488ea93f64c2295 (patch)
tree497a4906ddf884619145699f77145943c27b94d3 /xenolinux-2.4.16-sparse/arch
parent8d9db2d7e191309f809aaafeb588e6190d490c7d (diff)
downloadxen-a2104601f3481d9b1253f2a28488ea93f64c2295.tar.gz
xen-a2104601f3481d9b1253f2a28488ea93f64c2295.tar.bz2
xen-a2104601f3481d9b1253f2a28488ea93f64c2295.zip
bitkeeper revision 1.72 (3e53e864n4XeM5UI6L2plu_QV-Asug)
init.c, xl_block.c: Fix bugs in earlier blkdev checkin.
Diffstat (limited to 'xenolinux-2.4.16-sparse/arch')
-rw-r--r--xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c2
-rw-r--r--xenolinux-2.4.16-sparse/arch/xeno/mm/init.c16
2 files changed, 11 insertions, 7 deletions
diff --git a/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c b/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c
index e9f1aed53c..7eb4d9d2ec 100644
--- a/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c
+++ b/xenolinux-2.4.16-sparse/arch/xeno/drivers/block/xl_block.c
@@ -410,7 +410,7 @@ int __init xlblk_init(void)
int loop, error, result;
/* This mapping was created early at boot time. */
- blk_ring = (blk_ring_t *)FIX_BLKRING_BASE;
+ blk_ring = (blk_ring_t *)fix_to_virt(FIX_BLKRING_BASE);
blk_ring->req_prod = blk_ring->req_cons = 0;
blk_ring->resp_prod = blk_ring->resp_cons = 0;
diff --git a/xenolinux-2.4.16-sparse/arch/xeno/mm/init.c b/xenolinux-2.4.16-sparse/arch/xeno/mm/init.c
index ac2019910e..71b22ddcac 100644
--- a/xenolinux-2.4.16-sparse/arch/xeno/mm/init.c
+++ b/xenolinux-2.4.16-sparse/arch/xeno/mm/init.c
@@ -141,9 +141,9 @@ void __set_fixmap (enum fixed_addresses idx, unsigned long phys,
static void __init fixrange_init (unsigned long start,
unsigned long end, pgd_t *pgd_base)
{
- pgd_t *pgd;
- pmd_t *pmd;
- pte_t *pte;
+ pgd_t *pgd, *kpgd;
+ pmd_t *pmd, *kpmd;
+ pte_t *pte, *kpte;
int i, j;
unsigned long vaddr;
@@ -157,9 +157,13 @@ static void __init fixrange_init (unsigned long start,
for (; (j < PTRS_PER_PMD) && (vaddr != end); pmd++, j++) {
if (pmd_none(*pmd)) {
pte = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
+ clear_page(pte);
+ kpgd = pgd_offset_k((unsigned long)pte);
+ kpmd = pmd_offset(kpgd, (unsigned long)pte);
+ kpte = pte_offset(kpmd, (unsigned long)pte);
+ queue_l1_entry_update(__pa(kpte),
+ (*(unsigned long *)kpte)&~_PAGE_RW);
set_pmd(pmd, __pmd(_KERNPG_TABLE + __pa(pte)));
- if (pte != pte_offset(pmd, 0))
- BUG();
}
vaddr += PMD_SIZE;
}
@@ -195,7 +199,7 @@ void __init paging_init(void)
* mappings will be set by set_fixmap():
*/
vaddr = __fix_to_virt(__end_of_fixed_addresses - 1) & PMD_MASK;
- fixrange_init(vaddr, 0, init_mm.pgd);
+ fixrange_init(vaddr, HYPERVISOR_VIRT_START, init_mm.pgd);
/*
* XXX We do this conversion early, so that all other page tables