Remove code phys_ram_base uses.
Signed-off-by: Paul Brook <paul@codesourcery.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7085 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									31fc12df2c
								
							
						
					
					
						commit
						5579c7f37e
					
				@ -908,6 +908,9 @@ ram_addr_t qemu_ram_alloc(ram_addr_t);
 | 
				
			|||||||
void qemu_ram_free(ram_addr_t addr);
 | 
					void qemu_ram_free(ram_addr_t addr);
 | 
				
			||||||
/* This should only be used for ram local to a device.  */
 | 
					/* This should only be used for ram local to a device.  */
 | 
				
			||||||
void *qemu_get_ram_ptr(ram_addr_t addr);
 | 
					void *qemu_get_ram_ptr(ram_addr_t addr);
 | 
				
			||||||
 | 
					/* This should not be used by devices.  */
 | 
				
			||||||
 | 
					ram_addr_t qemu_ram_addr_from_host(void *ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int cpu_register_io_memory(int io_index,
 | 
					int cpu_register_io_memory(int io_index,
 | 
				
			||||||
                           CPUReadMemoryFunc **mem_read,
 | 
					                           CPUReadMemoryFunc **mem_read,
 | 
				
			||||||
                           CPUWriteMemoryFunc **mem_write,
 | 
					                           CPUWriteMemoryFunc **mem_write,
 | 
				
			||||||
 | 
				
			|||||||
@ -316,6 +316,7 @@ static inline target_ulong get_phys_addr_code(CPUState *env1, target_ulong addr)
 | 
				
			|||||||
static inline target_ulong get_phys_addr_code(CPUState *env1, target_ulong addr)
 | 
					static inline target_ulong get_phys_addr_code(CPUState *env1, target_ulong addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    int mmu_idx, page_index, pd;
 | 
					    int mmu_idx, page_index, pd;
 | 
				
			||||||
 | 
					    void *p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    page_index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
 | 
					    page_index = (addr >> TARGET_PAGE_BITS) & (CPU_TLB_SIZE - 1);
 | 
				
			||||||
    mmu_idx = cpu_mmu_index(env1);
 | 
					    mmu_idx = cpu_mmu_index(env1);
 | 
				
			||||||
@ -331,7 +332,9 @@ static inline target_ulong get_phys_addr_code(CPUState *env1, target_ulong addr)
 | 
				
			|||||||
        cpu_abort(env1, "Trying to execute code outside RAM or ROM at 0x" TARGET_FMT_lx "\n", addr);
 | 
					        cpu_abort(env1, "Trying to execute code outside RAM or ROM at 0x" TARGET_FMT_lx "\n", addr);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    return addr + env1->tlb_table[mmu_idx][page_index].addend - (unsigned long)phys_ram_base;
 | 
					    p = (void *)(unsigned long)addr
 | 
				
			||||||
 | 
					        + env1->tlb_table[mmu_idx][page_index].addend;
 | 
				
			||||||
 | 
					    return qemu_ram_addr_from_host(p);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Deterministic execution requires that IO only be performed on the last
 | 
					/* Deterministic execution requires that IO only be performed on the last
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										60
									
								
								exec.c
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								exec.c
									
									
									
									
									
								
							@ -1835,6 +1835,7 @@ static inline void tlb_reset_dirty_range(CPUTLBEntry *tlb_entry,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Note: start and end must be within the same ram block.  */
 | 
				
			||||||
void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end,
 | 
					void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end,
 | 
				
			||||||
                                     int dirty_flags)
 | 
					                                     int dirty_flags)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -1869,7 +1870,14 @@ void cpu_physical_memory_reset_dirty(ram_addr_t start, ram_addr_t end,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* we modify the TLB cache so that the dirty bit will be set again
 | 
					    /* we modify the TLB cache so that the dirty bit will be set again
 | 
				
			||||||
       when accessing the range */
 | 
					       when accessing the range */
 | 
				
			||||||
    start1 = start + (unsigned long)phys_ram_base;
 | 
					    start1 = (unsigned long)qemu_get_ram_ptr(start);
 | 
				
			||||||
 | 
					    /* Chek that we don't span multiple blocks - this breaks the
 | 
				
			||||||
 | 
					       address comparisons below.  */
 | 
				
			||||||
 | 
					    if ((unsigned long)qemu_get_ram_ptr(end - 1) - start1
 | 
				
			||||||
 | 
					            != (end - 1) - start) {
 | 
				
			||||||
 | 
					        abort();
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for(env = first_cpu; env != NULL; env = env->next_cpu) {
 | 
					    for(env = first_cpu; env != NULL; env = env->next_cpu) {
 | 
				
			||||||
        for(i = 0; i < CPU_TLB_SIZE; i++)
 | 
					        for(i = 0; i < CPU_TLB_SIZE; i++)
 | 
				
			||||||
            tlb_reset_dirty_range(&env->tlb_table[0][i], start1, length);
 | 
					            tlb_reset_dirty_range(&env->tlb_table[0][i], start1, length);
 | 
				
			||||||
@ -1910,10 +1918,12 @@ void cpu_physical_sync_dirty_bitmap(target_phys_addr_t start_addr, target_phys_a
 | 
				
			|||||||
static inline void tlb_update_dirty(CPUTLBEntry *tlb_entry)
 | 
					static inline void tlb_update_dirty(CPUTLBEntry *tlb_entry)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    ram_addr_t ram_addr;
 | 
					    ram_addr_t ram_addr;
 | 
				
			||||||
 | 
					    void *p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if ((tlb_entry->addr_write & ~TARGET_PAGE_MASK) == IO_MEM_RAM) {
 | 
					    if ((tlb_entry->addr_write & ~TARGET_PAGE_MASK) == IO_MEM_RAM) {
 | 
				
			||||||
        ram_addr = (tlb_entry->addr_write & TARGET_PAGE_MASK) +
 | 
					        p = (void *)(unsigned long)((tlb_entry->addr_write & TARGET_PAGE_MASK)
 | 
				
			||||||
            tlb_entry->addend - (unsigned long)phys_ram_base;
 | 
					            + tlb_entry->addend);
 | 
				
			||||||
 | 
					        ram_addr = qemu_ram_addr_from_host(p);
 | 
				
			||||||
        if (!cpu_physical_memory_is_dirty(ram_addr)) {
 | 
					        if (!cpu_physical_memory_is_dirty(ram_addr)) {
 | 
				
			||||||
            tlb_entry->addr_write |= TLB_NOTDIRTY;
 | 
					            tlb_entry->addr_write |= TLB_NOTDIRTY;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -2005,7 +2015,7 @@ int tlb_set_page_exec(CPUState *env, target_ulong vaddr,
 | 
				
			|||||||
        /* IO memory case (romd handled later) */
 | 
					        /* IO memory case (romd handled later) */
 | 
				
			||||||
        address |= TLB_MMIO;
 | 
					        address |= TLB_MMIO;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    addend = (unsigned long)phys_ram_base + (pd & TARGET_PAGE_MASK);
 | 
					    addend = (unsigned long)qemu_get_ram_ptr(pd & TARGET_PAGE_MASK);
 | 
				
			||||||
    if ((pd & ~TARGET_PAGE_MASK) <= IO_MEM_ROM) {
 | 
					    if ((pd & ~TARGET_PAGE_MASK) <= IO_MEM_ROM) {
 | 
				
			||||||
        /* Normal RAM.  */
 | 
					        /* Normal RAM.  */
 | 
				
			||||||
        iotlb = pd & TARGET_PAGE_MASK;
 | 
					        iotlb = pd & TARGET_PAGE_MASK;
 | 
				
			||||||
@ -2428,13 +2438,25 @@ void qemu_ram_free(ram_addr_t addr)
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Return a host pointer to ram allocated with qemu_ram_alloc.
 | 
					/* Return a host pointer to ram allocated with qemu_ram_alloc.
 | 
				
			||||||
   This may only be used if you actually allocated the ram, and
 | 
					   With the exception of the softmmu code in this file, this should
 | 
				
			||||||
   aready know how but the ram block is.  */
 | 
					   only be used for local memory (e.g. video ram) that the device owns,
 | 
				
			||||||
 | 
					   and knows it isn't going to access beyond the end of the block.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   It should not be used for general purpose DMA.
 | 
				
			||||||
 | 
					   Use cpu_physical_memory_map/cpu_physical_memory_rw instead.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
void *qemu_get_ram_ptr(ram_addr_t addr)
 | 
					void *qemu_get_ram_ptr(ram_addr_t addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    return phys_ram_base + addr;
 | 
					    return phys_ram_base + addr;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Some of the softmmu routines need to translate from a host pointer
 | 
				
			||||||
 | 
					   (typically a TLB entry) back to a ram offset.  */
 | 
				
			||||||
 | 
					ram_addr_t qemu_ram_addr_from_host(void *ptr)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  return (uint8_t *)ptr - phys_ram_base;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static uint32_t unassigned_mem_readb(void *opaque, target_phys_addr_t addr)
 | 
					static uint32_t unassigned_mem_readb(void *opaque, target_phys_addr_t addr)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifdef DEBUG_UNASSIGNED
 | 
					#ifdef DEBUG_UNASSIGNED
 | 
				
			||||||
@ -2521,7 +2543,7 @@ static void notdirty_mem_writeb(void *opaque, target_phys_addr_t ram_addr,
 | 
				
			|||||||
        dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS];
 | 
					        dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS];
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    stb_p(phys_ram_base + ram_addr, val);
 | 
					    stb_p(qemu_get_ram_ptr(ram_addr), val);
 | 
				
			||||||
#ifdef USE_KQEMU
 | 
					#ifdef USE_KQEMU
 | 
				
			||||||
    if (cpu_single_env->kqemu_enabled &&
 | 
					    if (cpu_single_env->kqemu_enabled &&
 | 
				
			||||||
        (dirty_flags & KQEMU_MODIFY_PAGE_MASK) != KQEMU_MODIFY_PAGE_MASK)
 | 
					        (dirty_flags & KQEMU_MODIFY_PAGE_MASK) != KQEMU_MODIFY_PAGE_MASK)
 | 
				
			||||||
@ -2546,7 +2568,7 @@ static void notdirty_mem_writew(void *opaque, target_phys_addr_t ram_addr,
 | 
				
			|||||||
        dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS];
 | 
					        dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS];
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    stw_p(phys_ram_base + ram_addr, val);
 | 
					    stw_p(qemu_get_ram_ptr(ram_addr), val);
 | 
				
			||||||
#ifdef USE_KQEMU
 | 
					#ifdef USE_KQEMU
 | 
				
			||||||
    if (cpu_single_env->kqemu_enabled &&
 | 
					    if (cpu_single_env->kqemu_enabled &&
 | 
				
			||||||
        (dirty_flags & KQEMU_MODIFY_PAGE_MASK) != KQEMU_MODIFY_PAGE_MASK)
 | 
					        (dirty_flags & KQEMU_MODIFY_PAGE_MASK) != KQEMU_MODIFY_PAGE_MASK)
 | 
				
			||||||
@ -2571,7 +2593,7 @@ static void notdirty_mem_writel(void *opaque, target_phys_addr_t ram_addr,
 | 
				
			|||||||
        dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS];
 | 
					        dirty_flags = phys_ram_dirty[ram_addr >> TARGET_PAGE_BITS];
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    stl_p(phys_ram_base + ram_addr, val);
 | 
					    stl_p(qemu_get_ram_ptr(ram_addr), val);
 | 
				
			||||||
#ifdef USE_KQEMU
 | 
					#ifdef USE_KQEMU
 | 
				
			||||||
    if (cpu_single_env->kqemu_enabled &&
 | 
					    if (cpu_single_env->kqemu_enabled &&
 | 
				
			||||||
        (dirty_flags & KQEMU_MODIFY_PAGE_MASK) != KQEMU_MODIFY_PAGE_MASK)
 | 
					        (dirty_flags & KQEMU_MODIFY_PAGE_MASK) != KQEMU_MODIFY_PAGE_MASK)
 | 
				
			||||||
@ -3030,7 +3052,7 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
 | 
				
			|||||||
                unsigned long addr1;
 | 
					                unsigned long addr1;
 | 
				
			||||||
                addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
					                addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
				
			||||||
                /* RAM case */
 | 
					                /* RAM case */
 | 
				
			||||||
                ptr = phys_ram_base + addr1;
 | 
					                ptr = qemu_get_ram_ptr(addr1);
 | 
				
			||||||
                memcpy(ptr, buf, l);
 | 
					                memcpy(ptr, buf, l);
 | 
				
			||||||
                if (!cpu_physical_memory_is_dirty(addr1)) {
 | 
					                if (!cpu_physical_memory_is_dirty(addr1)) {
 | 
				
			||||||
                    /* invalidate code */
 | 
					                    /* invalidate code */
 | 
				
			||||||
@ -3066,7 +3088,7 @@ void cpu_physical_memory_rw(target_phys_addr_t addr, uint8_t *buf,
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                /* RAM case */
 | 
					                /* RAM case */
 | 
				
			||||||
                ptr = phys_ram_base + (pd & TARGET_PAGE_MASK) +
 | 
					                ptr = qemu_get_ram_ptr(pd & TARGET_PAGE_MASK) +
 | 
				
			||||||
                    (addr & ~TARGET_PAGE_MASK);
 | 
					                    (addr & ~TARGET_PAGE_MASK);
 | 
				
			||||||
                memcpy(buf, ptr, l);
 | 
					                memcpy(buf, ptr, l);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -3107,7 +3129,7 @@ void cpu_physical_memory_write_rom(target_phys_addr_t addr,
 | 
				
			|||||||
            unsigned long addr1;
 | 
					            unsigned long addr1;
 | 
				
			||||||
            addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
					            addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
				
			||||||
            /* ROM/RAM case */
 | 
					            /* ROM/RAM case */
 | 
				
			||||||
            ptr = phys_ram_base + addr1;
 | 
					            ptr = qemu_get_ram_ptr(addr1);
 | 
				
			||||||
            memcpy(ptr, buf, l);
 | 
					            memcpy(ptr, buf, l);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        len -= l;
 | 
					        len -= l;
 | 
				
			||||||
@ -3207,7 +3229,7 @@ void *cpu_physical_memory_map(target_phys_addr_t addr,
 | 
				
			|||||||
            ptr = bounce.buffer;
 | 
					            ptr = bounce.buffer;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
					            addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
				
			||||||
            ptr = phys_ram_base + addr1;
 | 
					            ptr = qemu_get_ram_ptr(addr1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (!done) {
 | 
					        if (!done) {
 | 
				
			||||||
            ret = ptr;
 | 
					            ret = ptr;
 | 
				
			||||||
@ -3232,7 +3254,7 @@ void cpu_physical_memory_unmap(void *buffer, target_phys_addr_t len,
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    if (buffer != bounce.buffer) {
 | 
					    if (buffer != bounce.buffer) {
 | 
				
			||||||
        if (is_write) {
 | 
					        if (is_write) {
 | 
				
			||||||
            unsigned long addr1 = (uint8_t *)buffer - phys_ram_base;
 | 
					            ram_addr_t addr1 = qemu_ram_addr_from_host(buffer);
 | 
				
			||||||
            while (access_len) {
 | 
					            while (access_len) {
 | 
				
			||||||
                unsigned l;
 | 
					                unsigned l;
 | 
				
			||||||
                l = TARGET_PAGE_SIZE;
 | 
					                l = TARGET_PAGE_SIZE;
 | 
				
			||||||
@ -3284,7 +3306,7 @@ uint32_t ldl_phys(target_phys_addr_t addr)
 | 
				
			|||||||
        val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr);
 | 
					        val = io_mem_read[io_index][2](io_mem_opaque[io_index], addr);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        /* RAM case */
 | 
					        /* RAM case */
 | 
				
			||||||
        ptr = phys_ram_base + (pd & TARGET_PAGE_MASK) +
 | 
					        ptr = qemu_get_ram_ptr(pd & TARGET_PAGE_MASK) +
 | 
				
			||||||
            (addr & ~TARGET_PAGE_MASK);
 | 
					            (addr & ~TARGET_PAGE_MASK);
 | 
				
			||||||
        val = ldl_p(ptr);
 | 
					        val = ldl_p(ptr);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -3322,7 +3344,7 @@ uint64_t ldq_phys(target_phys_addr_t addr)
 | 
				
			|||||||
#endif
 | 
					#endif
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        /* RAM case */
 | 
					        /* RAM case */
 | 
				
			||||||
        ptr = phys_ram_base + (pd & TARGET_PAGE_MASK) +
 | 
					        ptr = qemu_get_ram_ptr(pd & TARGET_PAGE_MASK) +
 | 
				
			||||||
            (addr & ~TARGET_PAGE_MASK);
 | 
					            (addr & ~TARGET_PAGE_MASK);
 | 
				
			||||||
        val = ldq_p(ptr);
 | 
					        val = ldq_p(ptr);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -3369,7 +3391,7 @@ void stl_phys_notdirty(target_phys_addr_t addr, uint32_t val)
 | 
				
			|||||||
        io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val);
 | 
					        io_mem_write[io_index][2](io_mem_opaque[io_index], addr, val);
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        unsigned long addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
					        unsigned long addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
				
			||||||
        ptr = phys_ram_base + addr1;
 | 
					        ptr = qemu_get_ram_ptr(addr1);
 | 
				
			||||||
        stl_p(ptr, val);
 | 
					        stl_p(ptr, val);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (unlikely(in_migration)) {
 | 
					        if (unlikely(in_migration)) {
 | 
				
			||||||
@ -3410,7 +3432,7 @@ void stq_phys_notdirty(target_phys_addr_t addr, uint64_t val)
 | 
				
			|||||||
        io_mem_write[io_index][2](io_mem_opaque[io_index], addr + 4, val >> 32);
 | 
					        io_mem_write[io_index][2](io_mem_opaque[io_index], addr + 4, val >> 32);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
        ptr = phys_ram_base + (pd & TARGET_PAGE_MASK) +
 | 
					        ptr = qemu_get_ram_ptr(pd & TARGET_PAGE_MASK) +
 | 
				
			||||||
            (addr & ~TARGET_PAGE_MASK);
 | 
					            (addr & ~TARGET_PAGE_MASK);
 | 
				
			||||||
        stq_p(ptr, val);
 | 
					        stq_p(ptr, val);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -3440,7 +3462,7 @@ void stl_phys(target_phys_addr_t addr, uint32_t val)
 | 
				
			|||||||
        unsigned long addr1;
 | 
					        unsigned long addr1;
 | 
				
			||||||
        addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
					        addr1 = (pd & TARGET_PAGE_MASK) + (addr & ~TARGET_PAGE_MASK);
 | 
				
			||||||
        /* RAM case */
 | 
					        /* RAM case */
 | 
				
			||||||
        ptr = phys_ram_base + addr1;
 | 
					        ptr = qemu_get_ram_ptr(addr1);
 | 
				
			||||||
        stl_p(ptr, val);
 | 
					        stl_p(ptr, val);
 | 
				
			||||||
        if (!cpu_physical_memory_is_dirty(addr1)) {
 | 
					        if (!cpu_physical_memory_is_dirty(addr1)) {
 | 
				
			||||||
            /* invalidate code */
 | 
					            /* invalidate code */
 | 
				
			||||||
 | 
				
			|||||||
@ -101,7 +101,7 @@ static int kvm_set_user_memory_region(KVMState *s, KVMSlot *slot)
 | 
				
			|||||||
    mem.slot = slot->slot;
 | 
					    mem.slot = slot->slot;
 | 
				
			||||||
    mem.guest_phys_addr = slot->start_addr;
 | 
					    mem.guest_phys_addr = slot->start_addr;
 | 
				
			||||||
    mem.memory_size = slot->memory_size;
 | 
					    mem.memory_size = slot->memory_size;
 | 
				
			||||||
    mem.userspace_addr = (unsigned long)phys_ram_base + slot->phys_offset;
 | 
					    mem.userspace_addr = (unsigned long)qemu_get_ram_ptr(slot->phys_offset);
 | 
				
			||||||
    mem.flags = slot->flags;
 | 
					    mem.flags = slot->flags;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return kvm_vm_ioctl(s, KVM_SET_USER_MEMORY_REGION, &mem);
 | 
					    return kvm_vm_ioctl(s, KVM_SET_USER_MEMORY_REGION, &mem);
 | 
				
			||||||
@ -329,7 +329,7 @@ int kvm_init(int smp_cpus)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    /* initially, KVM allocated its own memory and we had to jump through
 | 
					    /* initially, KVM allocated its own memory and we had to jump through
 | 
				
			||||||
     * hooks to make phys_ram_base point to this.  Modern versions of KVM
 | 
					     * hooks to make phys_ram_base point to this.  Modern versions of KVM
 | 
				
			||||||
     * just use a user allocated buffer so we can use phys_ram_base
 | 
					     * just use a user allocated buffer so we can use regular pages
 | 
				
			||||||
     * unmodified.  Make sure we have a sufficiently modern version of KVM.
 | 
					     * unmodified.  Make sure we have a sufficiently modern version of KVM.
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    ret = kvm_ioctl(s, KVM_CHECK_EXTENSION, KVM_CAP_USER_MEMORY);
 | 
					    ret = kvm_ioctl(s, KVM_CHECK_EXTENSION, KVM_CAP_USER_MEMORY);
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										19
									
								
								vl.c
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								vl.c
									
									
									
									
									
								
							@ -3097,7 +3097,7 @@ static int ram_load_v1(QEMUFile *f, void *opaque)
 | 
				
			|||||||
    if (qemu_get_be32(f) != phys_ram_size)
 | 
					    if (qemu_get_be32(f) != phys_ram_size)
 | 
				
			||||||
        return -EINVAL;
 | 
					        return -EINVAL;
 | 
				
			||||||
    for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
 | 
					    for(i = 0; i < phys_ram_size; i+= TARGET_PAGE_SIZE) {
 | 
				
			||||||
        ret = ram_get_page(f, phys_ram_base + i, TARGET_PAGE_SIZE);
 | 
					        ret = ram_get_page(f, qemu_get_ram_ptr(i), TARGET_PAGE_SIZE);
 | 
				
			||||||
        if (ret)
 | 
					        if (ret)
 | 
				
			||||||
            return ret;
 | 
					            return ret;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -3184,20 +3184,20 @@ static int ram_save_block(QEMUFile *f)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    while (addr < phys_ram_size) {
 | 
					    while (addr < phys_ram_size) {
 | 
				
			||||||
        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
 | 
					        if (cpu_physical_memory_get_dirty(current_addr, MIGRATION_DIRTY_FLAG)) {
 | 
				
			||||||
            uint8_t ch;
 | 
					            uint8_t *p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            cpu_physical_memory_reset_dirty(current_addr,
 | 
					            cpu_physical_memory_reset_dirty(current_addr,
 | 
				
			||||||
                                            current_addr + TARGET_PAGE_SIZE,
 | 
					                                            current_addr + TARGET_PAGE_SIZE,
 | 
				
			||||||
                                            MIGRATION_DIRTY_FLAG);
 | 
					                                            MIGRATION_DIRTY_FLAG);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            ch = *(phys_ram_base + current_addr);
 | 
					            p = qemu_get_ram_ptr(current_addr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (is_dup_page(phys_ram_base + current_addr, ch)) {
 | 
					            if (is_dup_page(p, *p)) {
 | 
				
			||||||
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
 | 
					                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_COMPRESS);
 | 
				
			||||||
                qemu_put_byte(f, ch);
 | 
					                qemu_put_byte(f, *p);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
 | 
					                qemu_put_be64(f, current_addr | RAM_SAVE_FLAG_PAGE);
 | 
				
			||||||
                qemu_put_buffer(f, phys_ram_base + current_addr, TARGET_PAGE_SIZE);
 | 
					                qemu_put_buffer(f, p, TARGET_PAGE_SIZE);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            found = 1;
 | 
					            found = 1;
 | 
				
			||||||
@ -3278,7 +3278,8 @@ static int ram_load_dead(QEMUFile *f, void *opaque)
 | 
				
			|||||||
            goto error;
 | 
					            goto error;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (buf[0] == 0) {
 | 
					        if (buf[0] == 0) {
 | 
				
			||||||
            if (ram_decompress_buf(s, phys_ram_base + i, BDRV_HASH_BLOCK_SIZE) < 0) {
 | 
					            if (ram_decompress_buf(s, qemu_get_ram_ptr(i),
 | 
				
			||||||
 | 
					                                   BDRV_HASH_BLOCK_SIZE) < 0) {
 | 
				
			||||||
                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
 | 
					                fprintf(stderr, "Error while reading ram block address=0x%08" PRIx64, (uint64_t)i);
 | 
				
			||||||
                goto error;
 | 
					                goto error;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -3328,9 +3329,9 @@ static int ram_load(QEMUFile *f, void *opaque, int version_id)
 | 
				
			|||||||
        
 | 
					        
 | 
				
			||||||
        if (flags & RAM_SAVE_FLAG_COMPRESS) {
 | 
					        if (flags & RAM_SAVE_FLAG_COMPRESS) {
 | 
				
			||||||
            uint8_t ch = qemu_get_byte(f);
 | 
					            uint8_t ch = qemu_get_byte(f);
 | 
				
			||||||
            memset(phys_ram_base + addr, ch, TARGET_PAGE_SIZE);
 | 
					            memset(qemu_get_ram_ptr(addr), ch, TARGET_PAGE_SIZE);
 | 
				
			||||||
        } else if (flags & RAM_SAVE_FLAG_PAGE)
 | 
					        } else if (flags & RAM_SAVE_FLAG_PAGE)
 | 
				
			||||||
            qemu_get_buffer(f, phys_ram_base + addr, TARGET_PAGE_SIZE);
 | 
					            qemu_get_buffer(f, qemu_get_ram_ptr(addr), TARGET_PAGE_SIZE);
 | 
				
			||||||
    } while (!(flags & RAM_SAVE_FLAG_EOS));
 | 
					    } while (!(flags & RAM_SAVE_FLAG_EOS));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return 0;
 | 
					    return 0;
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user