|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v5 2/6] x86/gdbsx: Rename debug.c to gdbsx.c
From: Bobby Eshleman <bobby.eshleman@xxxxxxxxx>
debug.c contains only dbg_rw_mem(). Rename it to gdbsx.c.
Move gdbsx_guest_mem_io(), and the prior setup of iop->remain, from domctl.c
to gdbsx.c, merging it with dbg_rw_mem().
Signed-off-by: Bobby Eshleman <bobby.eshleman@xxxxxxxxx>
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
---
CC: Jan Beulich <JBeulich@xxxxxxxx>
CC: Roger Pau Monné <roger.pau@xxxxxxxxxx>
CC: Wei Liu <wl@xxxxxxx>
v5:
* Consolidate hunks from multiple v4 patches
* Rewrite commit message
The semantics are rather broken. XEN_DOMCTL_gdbsx_guestmemio only sets
copyback when there's nothing to copy back, and skips copying back in the
-EFAULT case when the iop->remain field is relevant. Furthermore, it can be
asked to move up to 4GB in one go, with no continuability whatsoever.
---
xen/arch/x86/Makefile | 2 +-
xen/arch/x86/domctl.c | 14 ++------------
xen/arch/x86/{debug.c => gdbsx.c} | 23 ++++++++++-------------
xen/arch/x86/include/asm/debugger.h | 6 ------
xen/arch/x86/include/asm/gdbsx.h | 13 +++++++++++++
5 files changed, 26 insertions(+), 32 deletions(-)
rename xen/arch/x86/{debug.c => gdbsx.c} (89%)
create mode 100644 xen/arch/x86/include/asm/gdbsx.h
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 717bcbcac7a0..177a2ff74272 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -22,7 +22,6 @@ obj-y += cpuid.o
obj-$(CONFIG_PV) += compat.o
obj-$(CONFIG_PV32) += x86_64/compat.o
obj-$(CONFIG_KEXEC) += crash.o
-obj-$(CONFIG_GDBSX) += debug.o
obj-y += delay.o
obj-y += desc.o
obj-bin-y += dmi_scan.init.o
@@ -34,6 +33,7 @@ obj-y += emul-i8254.o
obj-y += extable.o
obj-y += flushtlb.o
obj-$(CONFIG_CRASH_DEBUG) += gdbstub.o
+obj-$(CONFIG_GDBSX) += gdbsx.o
obj-y += hypercall.o
obj-y += i387.o
obj-y += i8259.o
diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c
index a6aae500a30b..c20ab4352715 100644
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -20,6 +20,8 @@
#include <xen/console.h>
#include <xen/iocap.h>
#include <xen/paging.h>
+
+#include <asm/gdbsx.h>
#include <asm/irq.h>
#include <asm/hvm/emulate.h>
#include <asm/hvm/hvm.h>
@@ -33,20 +35,9 @@
#include <public/vm_event.h>
#include <asm/mem_sharing.h>
#include <asm/xstate.h>
-#include <asm/debugger.h>
#include <asm/psr.h>
#include <asm/cpuid.h>
-#ifdef CONFIG_GDBSX
-static int gdbsx_guest_mem_io(struct domain *d, struct xen_domctl_gdbsx_memio
*iop)
-{
- iop->remain = dbg_rw_mem(iop->gva, guest_handle_from_ptr(iop->uva, void),
- iop->len, d, iop->gwr, iop->pgd3val);
-
- return iop->remain ? -EFAULT : 0;
-}
-#endif
-
static int update_domain_cpu_policy(struct domain *d,
xen_domctl_cpu_policy_t *xdpc)
{
@@ -827,7 +818,6 @@ long arch_do_domctl(
#ifdef CONFIG_GDBSX
case XEN_DOMCTL_gdbsx_guestmemio:
- domctl->u.gdbsx_guest_memio.remain = domctl->u.gdbsx_guest_memio.len;
ret = gdbsx_guest_mem_io(d, &domctl->u.gdbsx_guest_memio);
if ( !ret )
copyback = true;
diff --git a/xen/arch/x86/debug.c b/xen/arch/x86/gdbsx.c
similarity index 89%
rename from xen/arch/x86/debug.c
rename to xen/arch/x86/gdbsx.c
index 91034a852e5f..59eb31fc9a6a 100644
--- a/xen/arch/x86/debug.c
+++ b/xen/arch/x86/gdbsx.c
@@ -18,7 +18,7 @@
#include <xen/mm.h>
#include <xen/domain_page.h>
#include <xen/guest_access.h>
-#include <asm/debugger.h>
+#include <asm/gdbsx.h>
#include <asm/p2m.h>
typedef unsigned long dbgva_t;
@@ -150,21 +150,18 @@ static unsigned int dbg_rw_guest_mem(struct domain *dp,
unsigned long addr,
return len;
}
-/*
- * addr is guest addr
- * buf is debugger buffer.
- * if toaddr, then addr = buf (write to addr), else buf = addr (rd from guest)
- * pgd3: value of init_mm.pgd[3] in guest. see above.
- * Returns: number of bytes remaining to be copied.
- */
-unsigned int dbg_rw_mem(unsigned long gva, XEN_GUEST_HANDLE_PARAM(void) buf,
- unsigned int len, struct domain *d, bool toaddr,
- uint64_t pgd3)
+int gdbsx_guest_mem_io(struct domain *d, struct xen_domctl_gdbsx_memio *iop)
{
if ( d && !d->is_dying )
- len = dbg_rw_guest_mem(d, gva, buf, len, toaddr, pgd3);
+ {
+ iop->remain = dbg_rw_guest_mem(
+ d, iop->gva, guest_handle_from_ptr(iop->uva, void),
+ iop->len, iop->gwr, iop->pgd3val);
+ }
+ else
+ iop->remain = iop->len;
- return len;
+ return iop->remain ? -EFAULT : 0;
}
/*
diff --git a/xen/arch/x86/include/asm/debugger.h
b/xen/arch/x86/include/asm/debugger.h
index e83b346a21d1..c5585752cae7 100644
--- a/xen/arch/x86/include/asm/debugger.h
+++ b/xen/arch/x86/include/asm/debugger.h
@@ -54,10 +54,4 @@ static inline bool debugger_trap_fatal(
#endif
-#ifdef CONFIG_GDBSX
-unsigned int dbg_rw_mem(unsigned long gva, XEN_GUEST_HANDLE_PARAM(void) buf,
- unsigned int len, struct domain *d, bool toaddr,
- uint64_t pgd3);
-#endif
-
#endif /* __X86_DEBUGGER_H__ */
diff --git a/xen/arch/x86/include/asm/gdbsx.h b/xen/arch/x86/include/asm/gdbsx.h
new file mode 100644
index 000000000000..eee746fc01d0
--- /dev/null
+++ b/xen/arch/x86/include/asm/gdbsx.h
@@ -0,0 +1,13 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __X86_GDBX_H__
+#define __X86_GDBX_H__
+
+#ifdef CONFIG_GDBSX
+
+struct domain;
+struct xen_domctl_gdbsx_memio;
+
+int gdbsx_guest_mem_io(struct domain *d, struct xen_domctl_gdbsx_memio *iop);
+
+#endif /* CONFIG_GDBSX */
+#endif /* __X86_GDBX_H__ */
--
2.11.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |