mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
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:
@@ -796,7 +796,6 @@ static void __init early_reserve_memory(void)
|
|||||||
|
|
||||||
memblock_x86_reserve_range_setup_data();
|
memblock_x86_reserve_range_setup_data();
|
||||||
|
|
||||||
reserve_ibft_region();
|
|
||||||
reserve_bios_regions();
|
reserve_bios_regions();
|
||||||
trim_snb_memory();
|
trim_snb_memory();
|
||||||
}
|
}
|
||||||
@@ -1032,6 +1031,7 @@ void __init setup_arch(char **cmdline_p)
|
|||||||
if (efi_enabled(EFI_BOOT))
|
if (efi_enabled(EFI_BOOT))
|
||||||
efi_init();
|
efi_init();
|
||||||
|
|
||||||
|
reserve_ibft_region();
|
||||||
dmi_setup();
|
dmi_setup();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -16,6 +16,8 @@
|
|||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/xen/hypercall.h>
|
#include <asm/xen/hypercall.h>
|
||||||
|
|
||||||
|
#include "xen-ops.h"
|
||||||
|
|
||||||
static efi_char16_t vendor[100] __initdata;
|
static efi_char16_t vendor[100] __initdata;
|
||||||
|
|
||||||
static efi_system_table_t efi_systab_xen __initdata = {
|
static efi_system_table_t efi_systab_xen __initdata = {
|
||||||
|
@@ -86,6 +86,22 @@
|
|||||||
#include "mmu.h"
|
#include "mmu.h"
|
||||||
#include "debugfs.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
|
#ifdef CONFIG_X86_VSYSCALL_EMULATION
|
||||||
/* l3 pud for userspace vsyscall mapping */
|
/* l3 pud for userspace vsyscall mapping */
|
||||||
static pud_t level3_user_vsyscall[PTRS_PER_PUD] __page_aligned_bss;
|
static pud_t level3_user_vsyscall[PTRS_PER_PUD] __page_aligned_bss;
|
||||||
|
@@ -6,6 +6,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/iscsi_ibft.h>
|
||||||
#include <linux/sched.h>
|
#include <linux/sched.h>
|
||||||
#include <linux/kstrtox.h>
|
#include <linux/kstrtox.h>
|
||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
@@ -764,17 +765,26 @@ char * __init xen_memory_setup(void)
|
|||||||
BUG_ON(memmap.nr_entries == 0);
|
BUG_ON(memmap.nr_entries == 0);
|
||||||
xen_e820_table.nr_entries = memmap.nr_entries;
|
xen_e820_table.nr_entries = memmap.nr_entries;
|
||||||
|
|
||||||
/*
|
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
|
* Xen won't allow a 1:1 mapping to be created to UNUSABLE
|
||||||
* region as RAM as it is in the pseudo-physical map.
|
* 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.
|
* UNUSABLE regions in domUs are not handled and will need
|
||||||
*/
|
* a patch in the future.
|
||||||
if (xen_initial_domain())
|
*/
|
||||||
xen_ignore_unusable();
|
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. */
|
/* Make sure the Xen-supplied memory map is well-ordered. */
|
||||||
e820__update_table(&xen_e820_table);
|
e820__update_table(&xen_e820_table);
|
||||||
|
|
||||||
|
@@ -2,6 +2,10 @@
|
|||||||
#ifndef _XEN_SMP_H
|
#ifndef _XEN_SMP_H
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#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,
|
extern void xen_send_IPI_mask(const struct cpumask *mask,
|
||||||
int vector);
|
int vector);
|
||||||
extern void xen_send_IPI_mask_allbutself(const struct cpumask *mask,
|
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 DEFINE_PER_CPU(struct xen_common_irq, xen_pmu_irq) = { .irq = -1 };
|
||||||
|
|
||||||
static irqreturn_t xen_irq_work_interrupt(int irq, void *dev_id);
|
static irqreturn_t xen_irq_work_interrupt(int irq, void *dev_id);
|
||||||
void asm_cpu_bringup_and_idle(void);
|
|
||||||
|
|
||||||
static void cpu_bringup(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_init_time_ops(void);
|
||||||
void xen_hvm_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);
|
bool xen_vcpu_stolen(int vcpu);
|
||||||
|
|
||||||
void xen_vcpu_setup(int cpu);
|
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_pin_vcpu(int cpu);
|
||||||
|
|
||||||
void xen_emergency_restart(void);
|
void xen_emergency_restart(void);
|
||||||
|
void xen_force_evtchn_callback(void);
|
||||||
|
|
||||||
#ifdef CONFIG_XEN_PV
|
#ifdef CONFIG_XEN_PV
|
||||||
void xen_pv_pre_suspend(void);
|
void xen_pv_pre_suspend(void);
|
||||||
void xen_pv_post_suspend(int suspend_cancelled);
|
void xen_pv_post_suspend(int suspend_cancelled);
|
||||||
|
void xen_start_kernel(struct start_info *si);
|
||||||
#else
|
#else
|
||||||
static inline void xen_pv_pre_suspend(void) {}
|
static inline void xen_pv_pre_suspend(void) {}
|
||||||
static inline void xen_pv_post_suspend(int suspend_cancelled) {}
|
static inline void xen_pv_post_suspend(int suspend_cancelled) {}
|
||||||
|
@@ -42,8 +42,6 @@ static const struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define IBFT_SIGN_LEN 4
|
#define IBFT_SIGN_LEN 4
|
||||||
#define IBFT_START 0x80000 /* 512kB */
|
|
||||||
#define IBFT_END 0x100000 /* 1MB */
|
|
||||||
#define VGA_MEM 0xA0000 /* VGA buffer */
|
#define VGA_MEM 0xA0000 /* VGA buffer */
|
||||||
#define VGA_SIZE 0x20000 /* 128kB */
|
#define VGA_SIZE 0x20000 /* 128kB */
|
||||||
|
|
||||||
@@ -52,9 +50,9 @@ static const struct {
|
|||||||
*/
|
*/
|
||||||
void __init reserve_ibft_region(void)
|
void __init reserve_ibft_region(void)
|
||||||
{
|
{
|
||||||
unsigned long pos;
|
unsigned long pos, virt_pos = 0;
|
||||||
unsigned int len = 0;
|
unsigned int len = 0;
|
||||||
void *virt;
|
void *virt = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ibft_phys_addr = 0;
|
ibft_phys_addr = 0;
|
||||||
@@ -70,13 +68,20 @@ void __init reserve_ibft_region(void)
|
|||||||
* so skip that area */
|
* so skip that area */
|
||||||
if (pos == VGA_MEM)
|
if (pos == VGA_MEM)
|
||||||
pos += VGA_SIZE;
|
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++) {
|
for (i = 0; i < ARRAY_SIZE(ibft_signs); i++) {
|
||||||
if (memcmp(virt, ibft_signs[i].sign, IBFT_SIGN_LEN) ==
|
if (memcmp(virt + (pos - virt_pos), ibft_signs[i].sign,
|
||||||
0) {
|
IBFT_SIGN_LEN) == 0) {
|
||||||
unsigned long *addr =
|
unsigned long *addr =
|
||||||
(unsigned long *)isa_bus_to_virt(pos + 4);
|
(unsigned long *)(virt + pos - virt_pos + 4);
|
||||||
len = *addr;
|
len = *addr;
|
||||||
/* if the length of the table extends past 1M,
|
/* if the length of the table extends past 1M,
|
||||||
* the table cannot be valid. */
|
* the table cannot be valid. */
|
||||||
@@ -84,9 +89,12 @@ void __init reserve_ibft_region(void)
|
|||||||
ibft_phys_addr = pos;
|
ibft_phys_addr = pos;
|
||||||
memblock_reserve(ibft_phys_addr, PAGE_ALIGN(len));
|
memblock_reserve(ibft_phys_addr, PAGE_ALIGN(len));
|
||||||
pr_info("iBFT found at %pa.\n", &ibft_phys_addr);
|
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;
|
extern phys_addr_t ibft_phys_addr;
|
||||||
|
|
||||||
|
#ifdef CONFIG_ISCSI_IBFT_FIND
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Routine used to find and reserve the iSCSI Boot Format Table. The
|
* Routine used to find and reserve the iSCSI Boot Format Table. The
|
||||||
* physical address is set in the ibft_phys_addr variable.
|
* physical address is set in the ibft_phys_addr variable.
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_ISCSI_IBFT_FIND
|
|
||||||
void reserve_ibft_region(void);
|
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
|
#else
|
||||||
static inline void reserve_ibft_region(void) {}
|
static inline void reserve_ibft_region(void) {}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -138,4 +138,7 @@ int xen_test_irq_shared(int irq);
|
|||||||
|
|
||||||
/* initialize Xen IRQ subsystem */
|
/* initialize Xen IRQ subsystem */
|
||||||
void xen_init_IRQ(void);
|
void xen_init_IRQ(void);
|
||||||
|
|
||||||
|
irqreturn_t xen_debug_interrupt(int irq, void *dev_id);
|
||||||
|
|
||||||
#endif /* _XEN_EVENTS_H */
|
#endif /* _XEN_EVENTS_H */
|
||||||
|
@@ -31,6 +31,9 @@ extern uint32_t xen_start_flags;
|
|||||||
|
|
||||||
#include <xen/interface/hvm/start_info.h>
|
#include <xen/interface/hvm/start_info.h>
|
||||||
extern struct hvm_start_info pvh_start_info;
|
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
|
#ifdef CONFIG_XEN_DOM0
|
||||||
#include <xen/interface/xen.h>
|
#include <xen/interface/xen.h>
|
||||||
|
Reference in New Issue
Block a user