Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F106257308
D28982.id97267.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D28982.id97267.diff
View Options
Index: sys/conf/files
===================================================================
--- sys/conf/files
+++ sys/conf/files
@@ -5152,6 +5152,7 @@
vm/vm_swapout_dummy.c optional NO_SWAPPING
vm/vm_unix.c standard
vm/vnode_pager.c standard
+xen/common.c optional xenhvm
xen/features.c optional xenhvm
xen/xenbus/xenbus_if.m optional xenhvm
xen/xenbus/xenbus.c optional xenhvm
Index: sys/x86/xen/hvm.c
===================================================================
--- sys/x86/xen/hvm.c
+++ sys/x86/xen/hvm.c
@@ -66,8 +66,6 @@
static void xen_hvm_cpu_init(void);
/*-------------------------------- Global Data -------------------------------*/
-enum xen_domain_type xen_domain_type = XEN_NATIVE;
-
#ifdef SMP
struct cpu_ops xen_hvm_cpu_ops = {
.cpu_init = xen_hvm_cpu_init,
@@ -83,12 +81,6 @@
*/
int xen_vector_callback_enabled;
-/**
- * Start info flags. ATM this only used to store the initial domain flag for
- * PVHv2, and it's always empty for HVM guests.
- */
-uint32_t hvm_start_flags;
-
/**
* Signal whether the vector injected for the event channel upcall requires to
* be EOI'ed on the local APIC.
@@ -99,9 +91,6 @@
DPCPU_DEFINE(struct vcpu_info, vcpu_local_info);
DPCPU_DEFINE(struct vcpu_info *, vcpu_info);
-/*------------------ Hypervisor Access Shared Memory Regions -----------------*/
-shared_info_t *HYPERVISOR_shared_info;
-
/*------------------------------ Sysctl tunables -----------------------------*/
int xen_disable_pv_disks = 0;
int xen_disable_pv_nics = 0;
@@ -203,33 +192,6 @@
return (0);
}
-static void
-xen_hvm_init_shared_info_page(void)
-{
- struct xen_add_to_physmap xatp;
-
- if (xen_pv_domain()) {
- /*
- * Already setup in the PV case, shared_info is passed inside
- * of the start_info struct at start of day.
- */
- return;
- }
-
- if (HYPERVISOR_shared_info == NULL) {
- HYPERVISOR_shared_info = malloc(PAGE_SIZE, M_XENHVM, M_NOWAIT);
- if (HYPERVISOR_shared_info == NULL)
- panic("Unable to allocate Xen shared info page");
- }
-
- xatp.domid = DOMID_SELF;
- xatp.idx = 0;
- xatp.space = XENMAPSPACE_shared_info;
- xatp.gpfn = vtophys(HYPERVISOR_shared_info) >> PAGE_SHIFT;
- if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp))
- panic("HYPERVISOR_memory_op failed");
-}
-
static int
set_percpu_callback(unsigned int vcpu)
{
@@ -397,7 +359,7 @@
* is passed inside the start_info struct and is already set, so this
* functions are no-ops.
*/
- xen_hvm_init_shared_info_page();
+ xen_handle_shared_info();
xen_hvm_disable_emulated_devices();
}
Index: sys/xen/common.c
===================================================================
--- /dev/null
+++ sys/xen/common.c
@@ -0,0 +1,89 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2021 Elliott Mitchell
+ * Copyright (c) 2014 Julien Grall
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/param.h> /* required by xen/xen-os.h */
+#include <sys/kernel.h>
+
+#include <vm/vm.h>
+#include <vm/vm_page.h>
+
+#include <machine/atomic.h> /* required by xen/xen-os.h */
+
+#include <xen/xen-os.h>
+#include <xen/hvm.h>
+
+#include <xen/interface/event_channel.h>
+#include <xen/interface/hvm/params.h>
+
+/*-------------------------------- Global Data -------------------------------*/
+enum xen_domain_type xen_domain_type = XEN_NATIVE;
+
+/**
+ * Start info flags. ATM this only used to store the initial domain flag for
+ * PVHv2, and it's always empty for HVM guests.
+ */
+uint32_t hvm_start_flags;
+
+/*------------------ Hypervisor Access Shared Memory Regions -----------------*/
+shared_info_t *HYPERVISOR_shared_info = NULL;
+
+void
+xen_handle_shared_info(void)
+{
+ struct xen_add_to_physmap xatp;
+ vm_page_t shared_info;
+
+ /*
+ * Already setup in the PV case, shared_info is passed inside of the
+ * start_info struct at start of day. Also, don't try to initialize if
+ * not running on Xen.
+ */
+ if (!xen_hvm_domain())
+ return;
+
+ /*
+ * We expect to be called multiple times, the shared info page needs
+ * to be re-registered on resume.
+ */
+ if (HYPERVISOR_shared_info == NULL) {
+ shared_info = vm_page_alloc_noobj(VM_ALLOC_ZERO);
+ if (shared_info == NULL)
+ panic("Unable to allocate Xen shared info page\n");
+ HYPERVISOR_shared_info = pmap_mapdev_attr(
+ VM_PAGE_TO_PHYS(shared_info), PAGE_SIZE, VM_MEMATTR_XEN);
+
+ }
+
+ xatp.domid = DOMID_SELF;
+ xatp.idx = 0;
+ xatp.space = XENMAPSPACE_shared_info;
+ xatp.gpfn = vtophys(HYPERVISOR_shared_info) >> PAGE_SHIFT;
+ if (HYPERVISOR_memory_op(XENMEM_add_to_physmap, &xatp))
+ panic("Unable to map shared info\n");
+}
Index: sys/xen/hvm.h
===================================================================
--- sys/xen/hvm.h
+++ sys/xen/hvm.h
@@ -102,6 +102,7 @@
void xen_hvm_set_callback(device_t);
void xen_hvm_suspend(void);
void xen_hvm_resume(bool suspend_cancelled);
+void xen_handle_shared_info(void);
extern uint32_t hvm_start_flags;
extern bool xen_evtchn_needs_ack;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Dec 29, 1:44 AM (5 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15627004
Default Alt Text
D28982.id97267.diff (6 KB)
Attached To
Mode
D28982: xen: move common variables and code off of sys/x86/xen/hvm.c
Attached
Detach File
Event Timeline
Log In to Comment