mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 22:21:40 +00:00
xen: branch for v6.5-rc1
-----BEGIN PGP SIGNATURE----- iHUEABYIAB0WIQRTLbB6QfY48x44uB6AXGG7T9hjvgUCZJp4CgAKCRCAXGG7T9hj vmmpAP4gMe7T2QXWY9VvWgyf97z3AtBx2NdTzLAmArFySzPFtgEAgCHE3yy95bmR JAX4+q/2QPbFxp0TgJrrxlq5RDn5Ago= =2HjA -----END PGP SIGNATURE----- Merge tag 'for-linus-6.5-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip Pull xen updates from Juergen Gross: - three patches adding missing prototypes - a fix for finding the iBFT in a Xen dom0 for supporting diskless iSCSI boot * tag 'for-linus-6.5-rc1-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/xen/tip: x86: xen: add missing prototypes x86/xen: add prototypes for paravirt mmu functions iscsi_ibft: Fix finding the iBFT under Xen Dom 0 xen: xen_debug_interrupt prototype to global header
This commit is contained in:
commit
18eb3b6dff
@ -796,7 +796,6 @@ static void __init early_reserve_memory(void)
|
||||
|
||||
memblock_x86_reserve_range_setup_data();
|
||||
|
||||
reserve_ibft_region();
|
||||
reserve_bios_regions();
|
||||
trim_snb_memory();
|
||||
}
|
||||
@ -1032,6 +1031,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
if (efi_enabled(EFI_BOOT))
|
||||
efi_init();
|
||||
|
||||
reserve_ibft_region();
|
||||
dmi_setup();
|
||||
|
||||
/*
|
||||
|
@ -16,6 +16,8 @@
|
||||
#include <asm/setup.h>
|
||||
#include <asm/xen/hypercall.h>
|
||||
|
||||
#include "xen-ops.h"
|
||||
|
||||
static efi_char16_t vendor[100] __initdata;
|
||||
|
||||
static efi_system_table_t efi_systab_xen __initdata = {
|
||||
|
@ -86,6 +86,22 @@
|
||||
#include "mmu.h"
|
||||
#include "debugfs.h"
|
||||
|
||||
/*
|
||||
* Prototypes for functions called via PV_CALLEE_SAVE_REGS_THUNK() in order
|
||||
* to avoid warnings with "-Wmissing-prototypes".
|
||||
*/
|
||||
pteval_t xen_pte_val(pte_t pte);
|
||||
pgdval_t xen_pgd_val(pgd_t pgd);
|
||||
pmdval_t xen_pmd_val(pmd_t pmd);
|
||||
pudval_t xen_pud_val(pud_t pud);
|
||||
p4dval_t xen_p4d_val(p4d_t p4d);
|
||||
pte_t xen_make_pte(pteval_t pte);
|
||||
pgd_t xen_make_pgd(pgdval_t pgd);
|
||||
pmd_t xen_make_pmd(pmdval_t pmd);
|
||||
pud_t xen_make_pud(pudval_t pud);
|
||||
p4d_t xen_make_p4d(p4dval_t p4d);
|
||||
pte_t xen_make_pte_init(pteval_t pte);
|
||||
|
||||
#ifdef CONFIG_X86_VSYSCALL_EMULATION
|
||||
/* l3 pud for userspace vsyscall mapping */
|
||||
static pud_t level3_user_vsyscall[PTRS_PER_PUD] __page_aligned_bss;
|
||||
|
@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/iscsi_ibft.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/kstrtox.h>
|
||||
#include <linux/mm.h>
|
||||
@ -764,17 +765,26 @@ char * __init xen_memory_setup(void)
|
||||
BUG_ON(memmap.nr_entries == 0);
|
||||
xen_e820_table.nr_entries = memmap.nr_entries;
|
||||
|
||||
/*
|
||||
* Xen won't allow a 1:1 mapping to be created to UNUSABLE
|
||||
* regions, so if we're using the machine memory map leave the
|
||||
* region as RAM as it is in the pseudo-physical map.
|
||||
*
|
||||
* UNUSABLE regions in domUs are not handled and will need
|
||||
* a patch in the future.
|
||||
*/
|
||||
if (xen_initial_domain())
|
||||
if (xen_initial_domain()) {
|
||||
/*
|
||||
* Xen won't allow a 1:1 mapping to be created to UNUSABLE
|
||||
* regions, so if we're using the machine memory map leave the
|
||||
* region as RAM as it is in the pseudo-physical map.
|
||||
*
|
||||
* UNUSABLE regions in domUs are not handled and will need
|
||||
* a patch in the future.
|
||||
*/
|
||||
xen_ignore_unusable();
|
||||
|
||||
#ifdef CONFIG_ISCSI_IBFT_FIND
|
||||
/* Reserve 0.5 MiB to 1 MiB region so iBFT can be found */
|
||||
xen_e820_table.entries[xen_e820_table.nr_entries].addr = IBFT_START;
|
||||
xen_e820_table.entries[xen_e820_table.nr_entries].size = IBFT_END - IBFT_START;
|
||||
xen_e820_table.entries[xen_e820_table.nr_entries].type = E820_TYPE_RESERVED;
|
||||
xen_e820_table.nr_entries++;
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Make sure the Xen-supplied memory map is well-ordered. */
|
||||
e820__update_table(&xen_e820_table);
|
||||
|
||||
|
@ -2,6 +2,10 @@
|
||||
#ifndef _XEN_SMP_H
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
void asm_cpu_bringup_and_idle(void);
|
||||
asmlinkage void cpu_bringup_and_idle(void);
|
||||
|
||||
extern void xen_send_IPI_mask(const struct cpumask *mask,
|
||||
int vector);
|
||||
extern void xen_send_IPI_mask_allbutself(const struct cpumask *mask,
|
||||
|
@ -55,7 +55,6 @@ static DEFINE_PER_CPU(struct xen_common_irq, xen_irq_work) = { .irq = -1 };
|
||||
static DEFINE_PER_CPU(struct xen_common_irq, xen_pmu_irq) = { .irq = -1 };
|
||||
|
||||
static irqreturn_t xen_irq_work_interrupt(int irq, void *dev_id);
|
||||
void asm_cpu_bringup_and_idle(void);
|
||||
|
||||
static void cpu_bringup(void)
|
||||
{
|
||||
|
@ -72,8 +72,6 @@ void xen_restore_time_memory_area(void);
|
||||
void xen_init_time_ops(void);
|
||||
void xen_hvm_init_time_ops(void);
|
||||
|
||||
irqreturn_t xen_debug_interrupt(int irq, void *dev_id);
|
||||
|
||||
bool xen_vcpu_stolen(int vcpu);
|
||||
|
||||
void xen_vcpu_setup(int cpu);
|
||||
@ -148,9 +146,12 @@ int xen_cpuhp_setup(int (*cpu_up_prepare_cb)(unsigned int),
|
||||
void xen_pin_vcpu(int cpu);
|
||||
|
||||
void xen_emergency_restart(void);
|
||||
void xen_force_evtchn_callback(void);
|
||||
|
||||
#ifdef CONFIG_XEN_PV
|
||||
void xen_pv_pre_suspend(void);
|
||||
void xen_pv_post_suspend(int suspend_cancelled);
|
||||
void xen_start_kernel(struct start_info *si);
|
||||
#else
|
||||
static inline void xen_pv_pre_suspend(void) {}
|
||||
static inline void xen_pv_post_suspend(int suspend_cancelled) {}
|
||||
|
@ -42,8 +42,6 @@ static const struct {
|
||||
};
|
||||
|
||||
#define IBFT_SIGN_LEN 4
|
||||
#define IBFT_START 0x80000 /* 512kB */
|
||||
#define IBFT_END 0x100000 /* 1MB */
|
||||
#define VGA_MEM 0xA0000 /* VGA buffer */
|
||||
#define VGA_SIZE 0x20000 /* 128kB */
|
||||
|
||||
@ -52,9 +50,9 @@ static const struct {
|
||||
*/
|
||||
void __init reserve_ibft_region(void)
|
||||
{
|
||||
unsigned long pos;
|
||||
unsigned long pos, virt_pos = 0;
|
||||
unsigned int len = 0;
|
||||
void *virt;
|
||||
void *virt = NULL;
|
||||
int i;
|
||||
|
||||
ibft_phys_addr = 0;
|
||||
@ -70,13 +68,20 @@ void __init reserve_ibft_region(void)
|
||||
* so skip that area */
|
||||
if (pos == VGA_MEM)
|
||||
pos += VGA_SIZE;
|
||||
virt = isa_bus_to_virt(pos);
|
||||
|
||||
/* Map page by page */
|
||||
if (offset_in_page(pos) == 0) {
|
||||
if (virt)
|
||||
early_memunmap(virt, PAGE_SIZE);
|
||||
virt = early_memremap_ro(pos, PAGE_SIZE);
|
||||
virt_pos = pos;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ibft_signs); i++) {
|
||||
if (memcmp(virt, ibft_signs[i].sign, IBFT_SIGN_LEN) ==
|
||||
0) {
|
||||
if (memcmp(virt + (pos - virt_pos), ibft_signs[i].sign,
|
||||
IBFT_SIGN_LEN) == 0) {
|
||||
unsigned long *addr =
|
||||
(unsigned long *)isa_bus_to_virt(pos + 4);
|
||||
(unsigned long *)(virt + pos - virt_pos + 4);
|
||||
len = *addr;
|
||||
/* if the length of the table extends past 1M,
|
||||
* the table cannot be valid. */
|
||||
@ -84,9 +89,12 @@ void __init reserve_ibft_region(void)
|
||||
ibft_phys_addr = pos;
|
||||
memblock_reserve(ibft_phys_addr, PAGE_ALIGN(len));
|
||||
pr_info("iBFT found at %pa.\n", &ibft_phys_addr);
|
||||
return;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
out:
|
||||
early_memunmap(virt, PAGE_SIZE);
|
||||
}
|
||||
|
@ -21,12 +21,20 @@
|
||||
*/
|
||||
extern phys_addr_t ibft_phys_addr;
|
||||
|
||||
#ifdef CONFIG_ISCSI_IBFT_FIND
|
||||
|
||||
/*
|
||||
* Routine used to find and reserve the iSCSI Boot Format Table. The
|
||||
* physical address is set in the ibft_phys_addr variable.
|
||||
*/
|
||||
#ifdef CONFIG_ISCSI_IBFT_FIND
|
||||
void reserve_ibft_region(void);
|
||||
|
||||
/*
|
||||
* Physical bounds to search for the iSCSI Boot Format Table.
|
||||
*/
|
||||
#define IBFT_START 0x80000 /* 512kB */
|
||||
#define IBFT_END 0x100000 /* 1MB */
|
||||
|
||||
#else
|
||||
static inline void reserve_ibft_region(void) {}
|
||||
#endif
|
||||
|
@ -138,4 +138,7 @@ int xen_test_irq_shared(int irq);
|
||||
|
||||
/* initialize Xen IRQ subsystem */
|
||||
void xen_init_IRQ(void);
|
||||
|
||||
irqreturn_t xen_debug_interrupt(int irq, void *dev_id);
|
||||
|
||||
#endif /* _XEN_EVENTS_H */
|
||||
|
@ -31,6 +31,9 @@ extern uint32_t xen_start_flags;
|
||||
|
||||
#include <xen/interface/hvm/start_info.h>
|
||||
extern struct hvm_start_info pvh_start_info;
|
||||
void xen_prepare_pvh(void);
|
||||
struct pt_regs;
|
||||
void xen_pv_evtchn_do_upcall(struct pt_regs *regs);
|
||||
|
||||
#ifdef CONFIG_XEN_DOM0
|
||||
#include <xen/interface/xen.h>
|
||||
|
Loading…
Reference in New Issue
Block a user