File tree Expand file tree Collapse file tree 7 files changed +52
-3
lines changed Expand file tree Collapse file tree 7 files changed +52
-3
lines changed Original file line number Diff line number Diff line change 20
20
#endif
21
21
22
22
#ifdef CONFIG_32BIT
23
-
23
+ #ifdef CONFIG_KVM_GUEST
24
+ #define CAC_BASE _AC(0x40000000, UL)
25
+ #else
24
26
#define CAC_BASE _AC(0x80000000, UL)
27
+ #endif
25
28
#define IO_BASE _AC(0xa0000000, UL)
26
29
#define UNCAC_BASE _AC(0xa0000000, UL)
27
30
28
31
#ifndef MAP_BASE
32
+ #ifdef CONFIG_KVM_GUEST
33
+ #define MAP_BASE _AC(0x60000000, UL)
34
+ #else
29
35
#define MAP_BASE _AC(0xc0000000, UL)
30
36
#endif
37
+ #endif
31
38
32
39
/*
33
40
* Memory above this physical address will be considered highmem.
Original file line number Diff line number Diff line change @@ -44,11 +44,16 @@ extern unsigned int vced_count, vcei_count;
44
44
#define SPECIAL_PAGES_SIZE PAGE_SIZE
45
45
46
46
#ifdef CONFIG_32BIT
47
+ #ifdef CONFIG_KVM_GUEST
48
+ /* User space process size is limited to 1GB in KVM Guest Mode */
49
+ #define TASK_SIZE 0x3fff8000UL
50
+ #else
47
51
/*
48
52
* User space process size: 2GB. This is hardcoded into a few places,
49
53
* so don't change it unless you know what you are doing.
50
54
*/
51
55
#define TASK_SIZE 0x7fff8000UL
56
+ #endif
52
57
53
58
#ifdef __KERNEL__
54
59
#define STACK_TOP_MAX TASK_SIZE
Original file line number Diff line number Diff line change 23
23
*/
24
24
#ifdef CONFIG_32BIT
25
25
26
- #define __UA_LIMIT 0x80000000UL
26
+ #ifdef CONFIG_KVM_GUEST
27
+ #define __UA_LIMIT 0x40000000UL
28
+ #else
29
+ #define __UA_LIMIT 0x80000000UL
30
+ #endif
27
31
28
32
#define __UA_ADDR ".word"
29
33
#define __UA_LA "la"
@@ -55,8 +59,13 @@ extern u64 __ua_limit;
55
59
* address in this range it's the process's problem, not ours :-)
56
60
*/
57
61
62
+ #ifdef CONFIG_KVM_GUEST
63
+ #define KERNEL_DS ((mm_segment_t) { 0x80000000UL })
64
+ #define USER_DS ((mm_segment_t) { 0xC0000000UL })
65
+ #else
58
66
#define KERNEL_DS ((mm_segment_t) { 0UL })
59
67
#define USER_DS ((mm_segment_t) { __UA_LIMIT })
68
+ #endif
60
69
61
70
#define VERIFY_READ 0
62
71
#define VERIFY_WRITE 1
Original file line number Diff line number Diff line change @@ -48,7 +48,11 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
48
48
__res; \
49
49
})
50
50
51
+ #ifdef CONFIG_KVM_GUEST
52
+ #define TASK32_SIZE 0x3fff8000UL
53
+ #else
51
54
#define TASK32_SIZE 0x7fff8000UL
55
+ #endif
52
56
#undef ELF_ET_DYN_BASE
53
57
#define ELF_ET_DYN_BASE (TASK32_SIZE / 3 * 2)
54
58
Original file line number Diff line number Diff line change @@ -118,6 +118,10 @@ int c0_compare_int_usable(void)
118
118
unsigned int delta ;
119
119
unsigned int cnt ;
120
120
121
+ #ifdef CONFIG_KVM_GUEST
122
+ return 1 ;
123
+ #endif
124
+
121
125
/*
122
126
* IP7 already pending? Try to clear it by acking the timer.
123
127
*/
Original file line number Diff line number Diff line change @@ -1713,7 +1713,12 @@ void __init trap_init(void)
1713
1713
ebase = (unsigned long )
1714
1714
__alloc_bootmem (size , 1 << fls (size ), 0 );
1715
1715
} else {
1716
- ebase = CKSEG0 ;
1716
+ #ifdef CONFIG_KVM_GUEST
1717
+ #define KVM_GUEST_KSEG0 0x40000000
1718
+ ebase = KVM_GUEST_KSEG0 ;
1719
+ #else
1720
+ ebase = CKSEG0 ;
1721
+ #endif
1717
1722
if (cpu_has_mips_r2 )
1718
1723
ebase += (read_c0_ebase () & 0x3ffff000 );
1719
1724
}
Original file line number Diff line number Diff line change @@ -76,6 +76,21 @@ static void __init estimate_frequencies(void)
76
76
unsigned int count , start ;
77
77
unsigned int giccount = 0 , gicstart = 0 ;
78
78
79
+ #if defined (CONFIG_KVM_GUEST ) && defined (CONFIG_KVM_HOST_FREQ )
80
+ unsigned int prid = read_c0_prid () & 0xffff00 ;
81
+
82
+ /*
83
+ * XXXKYMA: hardwire the CPU frequency to Host Freq/4
84
+ */
85
+ count = (CONFIG_KVM_HOST_FREQ * 1000000 ) >> 3 ;
86
+ if ((prid != (PRID_COMP_MIPS | PRID_IMP_20KC )) &&
87
+ (prid != (PRID_COMP_MIPS | PRID_IMP_25KF )))
88
+ count *= 2 ;
89
+
90
+ mips_hpt_frequency = count ;
91
+ return ;
92
+ #endif
93
+
79
94
local_irq_save (flags );
80
95
81
96
/* Start counter exactly on falling edge of update flag. */
You can’t perform that action at this time.
0 commit comments