8e748c8d09
KVM guest kernels for trap & emulate run in user mode, with a modified set of kernel memory segments. However the fixmap address is still in the normal KSeg3 region at 0xfffe0000 regardless, causing problems when cache alias handling makes use of them when handling copy on write. Therefore define FIXADDR_TOP as 0x7ffe0000 in the guest kernel mapped region when CONFIG_KVM_GUEST is defined. Signed-off-by: James Hogan <james.hogan@imgtec.com> Cc: linux-mips@linux-mips.org Cc: <stable@vger.kernel.org> # v3.10+ Patchwork: https://patchwork.linux-mips.org/patch/9887/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
105 lines
2.3 KiB
C
105 lines
2.3 KiB
C
/*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
* for more details.
|
|
*
|
|
* Copyright (C) 1994 - 1999, 2000, 03, 04 Ralf Baechle
|
|
* Copyright (C) 2000, 2002 Maciej W. Rozycki
|
|
* Copyright (C) 1990, 1999, 2000 Silicon Graphics, Inc.
|
|
*/
|
|
#ifndef _ASM_MACH_GENERIC_SPACES_H
|
|
#define _ASM_MACH_GENERIC_SPACES_H
|
|
|
|
#include <linux/const.h>
|
|
|
|
/*
|
|
* This gives the physical RAM offset.
|
|
*/
|
|
#ifndef PHYS_OFFSET
|
|
#define PHYS_OFFSET _AC(0, UL)
|
|
#endif
|
|
|
|
#ifdef CONFIG_32BIT
|
|
#ifdef CONFIG_KVM_GUEST
|
|
#define CAC_BASE _AC(0x40000000, UL)
|
|
#else
|
|
#define CAC_BASE _AC(0x80000000, UL)
|
|
#endif
|
|
#ifndef IO_BASE
|
|
#define IO_BASE _AC(0xa0000000, UL)
|
|
#endif
|
|
#ifndef UNCAC_BASE
|
|
#define UNCAC_BASE _AC(0xa0000000, UL)
|
|
#endif
|
|
|
|
#ifndef MAP_BASE
|
|
#ifdef CONFIG_KVM_GUEST
|
|
#define MAP_BASE _AC(0x60000000, UL)
|
|
#else
|
|
#define MAP_BASE _AC(0xc0000000, UL)
|
|
#endif
|
|
#endif
|
|
|
|
/*
|
|
* Memory above this physical address will be considered highmem.
|
|
*/
|
|
#ifndef HIGHMEM_START
|
|
#define HIGHMEM_START _AC(0x20000000, UL)
|
|
#endif
|
|
|
|
#endif /* CONFIG_32BIT */
|
|
|
|
#ifdef CONFIG_64BIT
|
|
|
|
#ifndef CAC_BASE
|
|
#ifdef CONFIG_DMA_NONCOHERENT
|
|
#define CAC_BASE _AC(0x9800000000000000, UL)
|
|
#else
|
|
#define CAC_BASE _AC(0xa800000000000000, UL)
|
|
#endif
|
|
#endif
|
|
|
|
#ifndef IO_BASE
|
|
#define IO_BASE _AC(0x9000000000000000, UL)
|
|
#endif
|
|
|
|
#ifndef UNCAC_BASE
|
|
#define UNCAC_BASE _AC(0x9000000000000000, UL)
|
|
#endif
|
|
|
|
#ifndef MAP_BASE
|
|
#define MAP_BASE _AC(0xc000000000000000, UL)
|
|
#endif
|
|
|
|
/*
|
|
* Memory above this physical address will be considered highmem.
|
|
* Fixme: 59 bits is a fictive number and makes assumptions about processors
|
|
* in the distant future. Nobody will care for a few years :-)
|
|
*/
|
|
#ifndef HIGHMEM_START
|
|
#define HIGHMEM_START (_AC(1, UL) << _AC(59, UL))
|
|
#endif
|
|
|
|
#define TO_PHYS(x) ( ((x) & TO_PHYS_MASK))
|
|
#define TO_CAC(x) (CAC_BASE | ((x) & TO_PHYS_MASK))
|
|
#define TO_UNCAC(x) (UNCAC_BASE | ((x) & TO_PHYS_MASK))
|
|
|
|
#endif /* CONFIG_64BIT */
|
|
|
|
/*
|
|
* This handles the memory map.
|
|
*/
|
|
#ifndef PAGE_OFFSET
|
|
#define PAGE_OFFSET (CAC_BASE + PHYS_OFFSET)
|
|
#endif
|
|
|
|
#ifndef FIXADDR_TOP
|
|
#ifdef CONFIG_KVM_GUEST
|
|
#define FIXADDR_TOP ((unsigned long)(long)(int)0x7ffe0000)
|
|
#else
|
|
#define FIXADDR_TOP ((unsigned long)(long)(int)0xfffe0000)
|
|
#endif
|
|
#endif
|
|
|
|
#endif /* __ASM_MACH_GENERIC_SPACES_H */
|