[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 05/19] xen: Prepare xendev qtail to be shared with f
From: |
Emil Condrea |
Subject: |
[Qemu-devel] [PATCH 05/19] xen: Prepare xendev qtail to be shared with frontends |
Date: |
Sun, 10 Jul 2016 14:47:36 +0300 |
* move xendevs qtail to xen_pvdev.c
* change xen_be_get_xendev to use a new function: xen_pv_insert_xendev
Signed-off-by: Emil Condrea <address@hidden>
---
hw/xen/xen_backend.c | 70 +---------------------------------------
hw/xen/xen_pvdev.c | 75 +++++++++++++++++++++++++++++++++++++++++++
include/hw/xen/xen_backend.h | 1 -
include/hw/xen/xen_frontend.h | 2 ++
include/hw/xen/xen_pvdev.h | 4 +++
5 files changed, 82 insertions(+), 70 deletions(-)
diff --git a/hw/xen/xen_backend.c b/hw/xen/xen_backend.c
index 5f2821a..2f7f1a6 100644
--- a/hw/xen/xen_backend.c
+++ b/hw/xen/xen_backend.c
@@ -55,7 +55,6 @@ struct xs_dirs {
static QTAILQ_HEAD(xs_dirs_head, xs_dirs) xs_cleanup =
QTAILQ_HEAD_INITIALIZER(xs_cleanup);
-static QTAILQ_HEAD(XenDeviceHead, XenDevice) xendevs =
QTAILQ_HEAD_INITIALIZER(xendevs);
static int debug = 0;
static void xenstore_cleanup_dir(char *dir)
@@ -141,27 +140,6 @@ int xen_be_set_state(struct XenDevice *xendev, enum
xenbus_state state)
return 0;
}
-/* ------------------------------------------------------------- */
-
-struct XenDevice *xen_be_find_xendev(const char *type, int dom, int dev)
-{
- struct XenDevice *xendev;
-
- QTAILQ_FOREACH(xendev, &xendevs, next) {
- if (xendev->dom != dom) {
- continue;
- }
- if (xendev->dev != dev) {
- continue;
- }
- if (strcmp(xendev->type, type) != 0) {
- continue;
- }
- return xendev;
- }
- return NULL;
-}
-
/*
* get xen backend device, allocate a new one if it doesn't exist.
*/
@@ -210,7 +188,7 @@ static struct XenDevice *xen_be_get_xendev(const char
*type, int dom, int dev,
xendev->gnttabdev = NULL;
}
- QTAILQ_INSERT_TAIL(&xendevs, xendev, next);
+ xen_pv_insert_xendev(xendev);
if (xendev->ops->alloc) {
xendev->ops->alloc(xendev);
@@ -219,52 +197,6 @@ static struct XenDevice *xen_be_get_xendev(const char
*type, int dom, int dev,
return xendev;
}
-/*
- * release xen backend device.
- */
-static struct XenDevice *xen_be_del_xendev(int dom, int dev)
-{
- struct XenDevice *xendev, *xnext;
-
- /*
- * This is pretty much like QTAILQ_FOREACH(xendev, &xendevs, next) but
- * we save the next pointer in xnext because we might free xendev.
- */
- xnext = xendevs.tqh_first;
- while (xnext) {
- xendev = xnext;
- xnext = xendev->next.tqe_next;
-
- if (xendev->dom != dom) {
- continue;
- }
- if (xendev->dev != dev && dev != -1) {
- continue;
- }
-
- if (xendev->ops->free) {
- xendev->ops->free(xendev);
- }
-
- if (xendev->fe) {
- char token[XEN_BUFSIZE];
- snprintf(token, sizeof(token), "fe:%p", xendev);
- xs_unwatch(xenstore, xendev->fe, token);
- g_free(xendev->fe);
- }
-
- if (xendev->evtchndev != NULL) {
- xenevtchn_close(xendev->evtchndev);
- }
- if (xendev->gnttabdev != NULL) {
- xengnttab_close(xendev->gnttabdev);
- }
-
- QTAILQ_REMOVE(&xendevs, xendev, next);
- g_free(xendev);
- }
- return NULL;
-}
/*
* Sync internal data structures on xenstore updates.
diff --git a/hw/xen/xen_pvdev.c b/hw/xen/xen_pvdev.c
index 7876724..042adeb 100644
--- a/hw/xen/xen_pvdev.c
+++ b/hw/xen/xen_pvdev.c
@@ -23,7 +23,9 @@
#include "hw/xen/xen_frontend.h"
#include "hw/xen/xen_pvdev.h"
+/* private */
static int debug = 0;
+static QTAILQ_HEAD(XenDeviceHead, XenDevice) xendevs =
QTAILQ_HEAD_INITIALIZER(xendevs);
/* ------------------------------------------------------------- */
int xenstore_write_str(const char *base, const char *node, const char *val)
@@ -206,3 +208,76 @@ int xen_be_send_notify(struct XenDevice *xendev)
{
return xenevtchn_notify(xendev->evtchndev, xendev->local_port);
}
+
+/* ------------------------------------------------------------- */
+
+struct XenDevice *xen_be_find_xendev(const char *type, int dom, int dev)
+{
+ struct XenDevice *xendev;
+
+ QTAILQ_FOREACH(xendev, &xendevs, next) {
+ if (xendev->dom != dom) {
+ continue;
+ }
+ if (xendev->dev != dev) {
+ continue;
+ }
+ if (strcmp(xendev->type, type) != 0) {
+ continue;
+ }
+ return xendev;
+ }
+ return NULL;
+}
+
+/*
+ * release xen backend device.
+ */
+struct XenDevice *xen_be_del_xendev(int dom, int dev)
+{
+ struct XenDevice *xendev, *xnext;
+
+ /*
+ * This is pretty much like QTAILQ_FOREACH(xendev, &xendevs, next) but
+ * we save the next pointer in xnext because we might free xendev.
+ */
+ xnext = xendevs.tqh_first;
+ while (xnext) {
+ xendev = xnext;
+ xnext = xendev->next.tqe_next;
+
+ if (xendev->dom != dom) {
+ continue;
+ }
+ if (xendev->dev != dev && dev != -1) {
+ continue;
+ }
+
+ if (xendev->ops->free) {
+ xendev->ops->free(xendev);
+ }
+
+ if (xendev->fe) {
+ char token[XEN_BUFSIZE];
+ snprintf(token, sizeof(token), "fe:%p", xendev);
+ xs_unwatch(xenstore, xendev->fe, token);
+ g_free(xendev->fe);
+ }
+
+ if (xendev->evtchndev != NULL) {
+ xenevtchn_close(xendev->evtchndev);
+ }
+ if (xendev->gnttabdev != NULL) {
+ xengnttab_close(xendev->gnttabdev);
+ }
+
+ QTAILQ_REMOVE(&xendevs, xendev, next);
+ g_free(xendev);
+ }
+ return NULL;
+}
+
+void xen_pv_insert_xendev(struct XenDevice *xendev)
+{
+ QTAILQ_INSERT_TAIL(&xendevs, xendev, next);
+}
diff --git a/include/hw/xen/xen_backend.h b/include/hw/xen/xen_backend.h
index 60b634e..71dd158 100644
--- a/include/hw/xen/xen_backend.h
+++ b/include/hw/xen/xen_backend.h
@@ -21,7 +21,6 @@ char *xenstore_read_be_str(struct XenDevice *xendev, const
char *node);
int xenstore_read_be_int(struct XenDevice *xendev, const char *node, int
*ival);
void xenstore_update_be(char *watch, char *type, int dom, struct XenDevOps
*ops);
-struct XenDevice *xen_be_find_xendev(const char *type, int dom, int dev);
void xen_be_check_state(struct XenDevice *xendev);
/* xen backend driver bits */
diff --git a/include/hw/xen/xen_frontend.h b/include/hw/xen/xen_frontend.h
index 7d87da4..ae587e1 100644
--- a/include/hw/xen/xen_frontend.h
+++ b/include/hw/xen/xen_frontend.h
@@ -1,6 +1,8 @@
#ifndef QEMU_HW_XEN_FRONTEND_H
#define QEMU_HW_XEN_FRONTEND_H 1
+#include "hw/xen/xen_pvdev.h"
+
char *xenstore_read_fe_str(struct XenDevice *xendev, const char *node);
int xenstore_read_fe_int(struct XenDevice *xendev, const char *node, int
*ival);
int xenstore_read_fe_uint64(struct XenDevice *xendev, const char *node,
uint64_t *uval);
diff --git a/include/hw/xen/xen_pvdev.h b/include/hw/xen/xen_pvdev.h
index f269b04..234e111 100644
--- a/include/hw/xen/xen_pvdev.h
+++ b/include/hw/xen/xen_pvdev.h
@@ -67,6 +67,10 @@ void xenstore_update(void *unused);
const char *xenbus_strstate(enum xenbus_state state);
void xen_be_evtchn_event(void *opaque);
+void xen_pv_insert_xendev(struct XenDevice *xendev);
+struct XenDevice *xen_be_del_xendev(int dom, int dev);
+struct XenDevice *xen_be_find_xendev(const char *type, int dom, int dev);
+
void xen_be_unbind_evtchn(struct XenDevice *xendev);
int xen_be_send_notify(struct XenDevice *xendev);
--
1.9.1
- [Qemu-devel] [v9 00/19] QEMU:Xen stubdom vTPM for HVM virtual machine(QEMU Part), Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 01/19] xen: Create a new file xen_pvdev.c, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 02/19] xen: Create a new file xen_frontend.c, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 03/19] xen: Move xenstore_update to xen_pvdev.c, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 04/19] xen: Move evtchn functions to xen_pvdev.c, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 05/19] xen: Prepare xendev qtail to be shared with frontends,
Emil Condrea <=
- [Qemu-devel] [PATCH 08/19] xen: Rename xen_be_send_notify, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 06/19] xen: Rename xen_be_printf to xen_pv_printf, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 09/19] xen: Rename xen_be_evtchn_event, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 10/19] xen: Rename xen_be_find_xendev, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 07/19] xen: Rename xen_be_unbind_evtchn, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 13/19] xen: Distinguish between frontend and backend devops, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 12/19] xen: Rename xen_be_frontend_changed, Emil Condrea, 2016/07/10
- [Qemu-devel] [PATCH 11/19] xen: Rename xen_be_del_xendev, Emil Condrea, 2016/07/10