@@ -172,6 +172,7 @@
* so that all we need to do is modify the 8-bit constant field.
*/
#define __PV_BITS_31_24 0x81000000
+#define __PV_BITS_7_0 0x81
extern phys_addr_t (*arch_virt_to_idmap) (unsigned long x);
extern unsigned long __pv_phys_offset;
@@ -188,6 +189,15 @@ extern unsigned long __pv_offset;
: "=r" (to) \
: "r" (from), "I" (type))
+#define __pv_stub_mov(to, instr, type) \
+ __asm__ volatile("@ __pv_stub_mov\n" \
+ "1: " instr " %R0, %1\n" \
+ " .pushsection .pv_high_table,\"a\"\n" \
+ " .long 1b\n" \
+ " .popsection\n" \
+ : "=r" (to) \
+ : "I" (type))
+
static inline phys_addr_t __virt_to_phys(unsigned long x)
{
unsigned long t;
@@ -565,6 +565,8 @@ ENDPROC(__fixup_pv_table)
.long __pv_table_begin
.long __pv_table_end
2: .long __pv_phys_offset
+3: .long __pv_high_table_begin
+ .long __pv_high_table_end
.text
__fixup_a_pv_table:
@@ -182,6 +182,11 @@ SECTIONS
*(.pv_table)
__pv_table_end = .;
}
+ .init.pv_high_table : {
+ __pv_high_table_begin = .;
+ *(.pv_high_table)
+ __pv_high_table_end = .;
+ }
.init.data : {
#ifndef CONFIG_XIP_KERNEL
INIT_DATA