All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dongli Zhang <dongli.zhang@oracle.com>
To: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org
Cc: jgross@suse.com, wei.liu2@citrix.com, konrad.wilk@oracle.com,
	srinivas.eeda@oracle.com, paul.durrant@citrix.com,
	boris.ostrovsky@oracle.com, roger.pau@citrix.com
Subject: [PATCH 3/6] xenbus: dispatch per-domU watch event to per-domU xenwatch thread
Date: Fri, 14 Sep 2018 15:34:13 +0800	[thread overview]
Message-ID: <1536910456-13337-4-git-send-email-dongli.zhang__47125.6039025777$1536910375$gmane$org@oracle.com> (raw)
In-Reply-To: <1536910456-13337-1-git-send-email-dongli.zhang@oracle.com>

This is the 3rd patch of a (6-patch) patch set.

This patch dispatches the watch event to per-domU xenwatch thread when the
event meets all of below conditions:

1. The watch is registered to use xenwatch multithreading feature and the
   get_domid() method returns valid domid.
2. There is xenwatch thread (mtwatch domain) available for the domid
   obtained from get_domid() method.
3. The xenwatch thread is forked successfully by kthread_run() during
   initialization and therefore its state should be MTWATCH_DOMAIN_UP.

Signed-off-by: Dongli Zhang <dongli.zhang@oracle.com>
---
 drivers/xen/xenbus/xenbus_xs.c | 53 ++++++++++++++++++++++++++++++++++++++----
 1 file changed, 49 insertions(+), 4 deletions(-)

diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c
index 741dc54..7335e19 100644
--- a/drivers/xen/xenbus/xenbus_xs.c
+++ b/drivers/xen/xenbus/xenbus_xs.c
@@ -896,6 +896,32 @@ static struct xenbus_watch *find_watch(const char *token)
 	return NULL;
 }
 
+static int xs_watch_insert_event(struct xs_watch_event *event, domid_t domid)
+{
+	struct mtwatch_domain *domain;
+	int ret = -1;
+
+	rcu_read_lock();
+
+	domain = mtwatch_find_domain(domid);
+	if (!domain) {
+		rcu_read_unlock();
+		return ret;
+	}
+
+	spin_lock(&domain->events_lock);
+	if (domain->state == MTWATCH_DOMAIN_UP) {
+		list_add_tail(&event->list, &domain->events);
+		wake_up(&domain->events_wq);
+		ret = 0;
+	}
+	spin_unlock(&domain->events_lock);
+
+	rcu_read_unlock();
+
+	return ret;
+}
+
 int xs_watch_msg(struct xs_watch_event *event)
 {
 	if (count_strings(event->body, event->len) != 2) {
@@ -908,10 +934,29 @@ int xs_watch_msg(struct xs_watch_event *event)
 	spin_lock(&watches_lock);
 	event->handle = find_watch(event->token);
 	if (event->handle != NULL) {
-		spin_lock(&watch_events_lock);
-		list_add_tail(&event->list, &watch_events);
-		wake_up(&watch_events_waitq);
-		spin_unlock(&watch_events_lock);
+		domid_t domid = 0;
+
+		if (xen_mtwatch && event->handle->get_domid)
+			domid = event->handle->get_domid(event->handle,
+							 event->path,
+							 event->token);
+
+		/*
+		 * The event is processed by default xenwatch thread if:
+		 *
+		 * 1. The watch does not use xenwatch multithreading.
+		 * 2. There is no per-domU xenwatch thread (or mtwatch
+		 *    domain) available for this domid.
+		 * 3. The per-domU xenwatch thread is not created
+		 *    successfully by kthread_run() during initialization.
+		 */
+		if (!(domid &&
+		      xs_watch_insert_event(event, domid) == 0)) {
+			spin_lock(&watch_events_lock);
+			list_add_tail(&event->list, &watch_events);
+			wake_up(&watch_events_waitq);
+			spin_unlock(&watch_events_lock);
+		}
 	} else
 		kfree(event);
 	spin_unlock(&watches_lock);
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  parent reply	other threads:[~2018-09-14  7:34 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-09-14  7:34 Introduce xenwatch multithreading (mtwatch) Dongli Zhang
2018-09-14  7:34 ` [PATCH 1/6] xenbus: prepare data structures and parameter for xenwatch multithreading Dongli Zhang
2018-09-14  8:11   ` Paul Durrant
2018-09-14  8:11   ` Paul Durrant
2018-09-14 13:40     ` Dongli Zhang
2018-09-14 13:40     ` [Xen-devel] " Dongli Zhang
2018-09-14  8:32   ` Juergen Gross
2018-09-14 13:57     ` [Xen-devel] " Dongli Zhang
2018-09-14 14:10       ` Juergen Gross
2018-09-14 14:10       ` [Xen-devel] " Juergen Gross
2018-09-14 13:57     ` Dongli Zhang
2018-09-14  8:32   ` Juergen Gross
2018-09-16 20:17   ` Boris Ostrovsky
2018-09-17  1:20     ` Dongli Zhang
2018-09-17  1:20     ` Dongli Zhang
2018-09-17 19:08       ` Boris Ostrovsky
2018-09-17 19:08       ` Boris Ostrovsky
2018-09-25  5:14         ` Dongli Zhang
2018-09-25  5:14         ` Dongli Zhang
2018-09-25 20:19           ` Boris Ostrovsky
2018-09-26  2:57             ` Dongli Zhang
2018-09-26  2:57             ` [Xen-devel] " Dongli Zhang
2018-09-25 20:19           ` Boris Ostrovsky
2018-09-16 20:17   ` Boris Ostrovsky
2018-09-14  7:34 ` Dongli Zhang
2018-09-14  7:34 ` [PATCH 2/6] xenbus: implement the xenwatch multithreading framework Dongli Zhang
2018-09-14  8:45   ` Paul Durrant
2018-09-14  8:45   ` Paul Durrant
2018-09-14 14:09     ` Dongli Zhang
2018-09-14 14:09     ` [Xen-devel] " Dongli Zhang
2018-09-14  8:56   ` Juergen Gross
2018-09-14  8:56   ` Juergen Gross
2018-09-16 21:20   ` Boris Ostrovsky
2018-09-16 21:20   ` Boris Ostrovsky
2018-09-17  1:48     ` Dongli Zhang
2018-09-17  1:48     ` [Xen-devel] " Dongli Zhang
2018-09-17 20:00       ` Boris Ostrovsky
2018-09-17 20:00       ` Boris Ostrovsky
2018-09-14  7:34 ` Dongli Zhang
2018-09-14  7:34 ` Dongli Zhang [this message]
2018-09-14  7:34 ` [PATCH 3/6] xenbus: dispatch per-domU watch event to per-domU xenwatch thread Dongli Zhang
2018-09-14  9:01   ` Juergen Gross
2018-09-14  9:01   ` Juergen Gross
2018-09-17 20:09   ` Boris Ostrovsky
2018-09-17 20:09   ` Boris Ostrovsky
2018-09-14  7:34 ` [PATCH 4/6] xenbus: process otherend_watch event at 'state' entry in xenwatch multithreading Dongli Zhang
2018-09-14  7:34 ` Dongli Zhang
2018-09-14  9:04   ` Juergen Gross
2018-09-14  9:04   ` Juergen Gross
2018-09-14  7:34 ` [PATCH 5/6] xenbus: process be_watch events " Dongli Zhang
2018-09-14  7:34 ` Dongli Zhang
2018-09-14  9:12   ` Juergen Gross
2018-09-14 14:18     ` [Xen-devel] " Dongli Zhang
2018-09-14 14:26       ` Juergen Gross
2018-09-14 14:29         ` Dongli Zhang
2018-09-14 14:29         ` [Xen-devel] " Dongli Zhang
2018-09-14 14:44           ` Juergen Gross
2018-09-19  6:15             ` Dongli Zhang
2018-09-19  6:15             ` [Xen-devel] " Dongli Zhang
2018-09-19  8:01               ` Juergen Gross
2018-09-19 12:27                 ` Dongli Zhang
2018-09-19 12:44                   ` Juergen Gross
2018-09-19 12:44                   ` [Xen-devel] " Juergen Gross
2018-09-19 12:27                 ` Dongli Zhang
2018-09-19  8:01               ` Juergen Gross
2018-09-14 14:44           ` Juergen Gross
2018-09-14 14:26       ` Juergen Gross
2018-09-14 14:18     ` Dongli Zhang
2018-09-14 14:33     ` [Xen-devel] " Dongli Zhang
2018-09-14 14:33     ` Dongli Zhang
2018-09-14  9:12   ` Juergen Gross
2018-09-14  7:34 ` [PATCH 6/6] drivers: enable xenwatch multithreading for xen-netback and xen-blkback driver Dongli Zhang
2018-09-14  9:16   ` Juergen Gross
2018-09-14  9:16   ` Juergen Gross
2018-09-14  9:38     ` Wei Liu
2018-09-14  9:38     ` Wei Liu
2018-09-14  9:56     ` Roger Pau Monné
2018-09-14  9:56     ` Roger Pau Monné
2018-09-14  7:34 ` Dongli Zhang
2018-09-14  8:16 ` Introduce xenwatch multithreading (mtwatch) Paul Durrant
2018-09-14  8:16 ` Paul Durrant
2018-09-14  9:18 ` Juergen Gross
2018-09-14  9:18 ` Juergen Gross

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='1536910456-13337-4-git-send-email-dongli.zhang__47125.6039025777$1536910375$gmane$org@oracle.com' \
    --to=dongli.zhang@oracle.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=jgross@suse.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paul.durrant@citrix.com \
    --cc=roger.pau@citrix.com \
    --cc=srinivas.eeda@oracle.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xenproject.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.