mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
To: <linux-kernel@vger.kernel.org>
Cc: <xen-devel@lists.xensource.com>,
	<Stefano.Stabellini@eu.citrix.com>, <konrad.wilk@oracle.com>,
	<tim@xen.org>, <Ian.Campbell@citrix.com>,
	<linux-arm-kernel@lists.infradead.org>,
	<linaro-dev@lists.linaro.org>, <catalin.marinas@arm.com>,
	<arnd@arndb.de>,
	Stefano Stabellini <stefano.stabellini@eu.citrix.com>
Subject: [PATCH v3 10/25] xen/arm: compile and run xenbus
Date: Thu, 16 Aug 2012 16:36:02 +0100	[thread overview]
Message-ID: <1345131377-14713-10-git-send-email-stefano.stabellini@eu.citrix.com> (raw)
In-Reply-To: <alpine.DEB.2.02.1208161618550.4850@kaball.uk.xensource.com>

bind_evtchn_to_irqhandler can legitimately return 0 (irq 0): it is not
an error.

If Linux is running as an HVM domain and is running as Dom0, use
xenstored_local_init to initialize the xenstore page and event channel.

Changes in v2:

- refactor xenbus_init.

Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
 drivers/xen/xenbus/xenbus_comms.c |    2 +-
 drivers/xen/xenbus/xenbus_probe.c |   62 +++++++++++++++++++++++++-----------
 drivers/xen/xenbus/xenbus_xs.c    |    1 +
 3 files changed, 45 insertions(+), 20 deletions(-)

diff --git a/drivers/xen/xenbus/xenbus_comms.c b/drivers/xen/xenbus/xenbus_comms.c
index 52fe7ad..c5aa55c 100644
--- a/drivers/xen/xenbus/xenbus_comms.c
+++ b/drivers/xen/xenbus/xenbus_comms.c
@@ -224,7 +224,7 @@ int xb_init_comms(void)
 		int err;
 		err = bind_evtchn_to_irqhandler(xen_store_evtchn, wake_waiting,
 						0, "xenbus", &xb_waitq);
-		if (err <= 0) {
+		if (err < 0) {
 			printk(KERN_ERR "XENBUS request irq failed %i\n", err);
 			return err;
 		}
diff --git a/drivers/xen/xenbus/xenbus_probe.c b/drivers/xen/xenbus/xenbus_probe.c
index b793723..a67ccc0 100644
--- a/drivers/xen/xenbus/xenbus_probe.c
+++ b/drivers/xen/xenbus/xenbus_probe.c
@@ -719,37 +719,61 @@ static int __init xenstored_local_init(void)
 	return err;
 }
 
+enum xenstore_init {
+	UNKNOWN,
+	PV,
+	HVM,
+	LOCAL,
+};
 static int __init xenbus_init(void)
 {
 	int err = 0;
+	enum xenstore_init usage = UNKNOWN;
+	uint64_t v = 0;
 
 	if (!xen_domain())
 		return -ENODEV;
 
 	xenbus_ring_ops_init();
 
-	if (xen_hvm_domain()) {
-		uint64_t v = 0;
-		err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v);
-		if (err)
-			goto out_error;
-		xen_store_evtchn = (int)v;
-		err = hvm_get_parameter(HVM_PARAM_STORE_PFN, &v);
-		if (err)
-			goto out_error;
-		xen_store_mfn = (unsigned long)v;
-		xen_store_interface = ioremap(xen_store_mfn << PAGE_SHIFT, PAGE_SIZE);
-	} else {
-		xen_store_evtchn = xen_start_info->store_evtchn;
-		xen_store_mfn = xen_start_info->store_mfn;
-		if (xen_store_evtchn)
-			xenstored_ready = 1;
-		else {
+	if (xen_pv_domain())
+		usage = PV;
+	if (xen_hvm_domain())
+		usage = HVM;
+	if (xen_hvm_domain() && xen_initial_domain())
+		usage = LOCAL;
+	if (xen_pv_domain() && !xen_start_info->store_evtchn)
+		usage = LOCAL;
+	if (xen_pv_domain() && xen_start_info->store_evtchn)
+		xenstored_ready = 1;
+
+	switch (usage) {
+		case LOCAL:
 			err = xenstored_local_init();
 			if (err)
 				goto out_error;
-		}
-		xen_store_interface = mfn_to_virt(xen_store_mfn);
+			xen_store_interface = mfn_to_virt(xen_store_mfn);
+			break;
+		case PV:
+			xen_store_evtchn = xen_start_info->store_evtchn;
+			xen_store_mfn = xen_start_info->store_mfn;
+			xen_store_interface = mfn_to_virt(xen_store_mfn);
+			break;
+		case HVM:
+			err = hvm_get_parameter(HVM_PARAM_STORE_EVTCHN, &v);
+			if (err)
+				goto out_error;
+			xen_store_evtchn = (int)v;
+			err = hvm_get_parameter(HVM_PARAM_STORE_PFN, &v);
+			if (err)
+				goto out_error;
+			xen_store_mfn = (unsigned long)v;
+			xen_store_interface =
+				ioremap(xen_store_mfn << PAGE_SHIFT, PAGE_SIZE);
+			break;
+		default:
+			pr_warn("Xenstore state unknown\n");
+			break;
 	}
 
 	/* Initialize the interface to xenstore. */
diff --git a/drivers/xen/xenbus/xenbus_xs.c b/drivers/xen/xenbus/xenbus_xs.c
index d1c217b..f7feb3d 100644
--- a/drivers/xen/xenbus/xenbus_xs.c
+++ b/drivers/xen/xenbus/xenbus_xs.c
@@ -44,6 +44,7 @@
 #include <linux/rwsem.h>
 #include <linux/module.h>
 #include <linux/mutex.h>
+#include <asm/xen/hypervisor.h>
 #include <xen/xenbus.h>
 #include <xen/xen.h>
 #include "xenbus_comms.h"
-- 
1.7.2.5


  parent reply	other threads:[~2012-08-16 15:36 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-16 15:33 [PATCH v3 00/23] Introduce Xen support on ARM Stefano Stabellini
2012-08-16 15:35 ` [PATCH v3 01/25] arm: initial Xen support Stefano Stabellini
2012-08-16 15:35 ` [PATCH v3 02/25] xen/arm: hypercalls Stefano Stabellini
2012-08-16 15:35 ` [PATCH v3 03/25] xen/arm: page.h definitions Stefano Stabellini
2012-08-16 15:35 ` [PATCH v3 04/25] xen/arm: sync_bitops Stefano Stabellini
2012-08-16 15:35 ` [PATCH v3 05/25] xen/arm: empty implementation of grant_table arch specific functions Stefano Stabellini
2012-08-16 15:35 ` [PATCH v3 06/25] docs: Xen ARM DT bindings Stefano Stabellini
2012-08-27 23:03   ` Rob Herring
2012-09-12 17:07     ` Stefano Stabellini
2012-09-12 18:14       ` Stefano Stabellini
2012-09-13  2:34         ` Rob Herring
2012-09-13 10:29           ` Dave Martin
2012-09-13 11:19             ` Stefano Stabellini
2012-09-13 11:33           ` Stefano Stabellini
2012-09-13 10:26         ` Dave Martin
2012-09-13 11:12           ` Stefano Stabellini
2012-08-16 15:35 ` [PATCH v3 07/25] xen/arm: Xen detection and shared_info page mapping Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 08/25] xen/arm: Introduce xen_pfn_t for pfn and mfn types Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 09/25] xen/arm: Introduce xen_ulong_t for unsigned long Stefano Stabellini
2012-08-16 15:36 ` Stefano Stabellini [this message]
2012-08-16 15:36 ` [PATCH v3 11/25] xen: do not compile manage, balloon, pci, acpi and cpu_hotplug on ARM Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 12/25] xen/arm: introduce CONFIG_XEN " Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 13/25] xen/arm: get privilege status Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 14/25] xen/arm: initialize grant_table on ARM Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 15/25] xen/arm: receive Xen events " Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 16/25] xen: clear IRQ_NOAUTOEN and IRQ_NOREQUEST Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 17/25] xen/arm: implement alloc/free_xenballooned_pages with alloc_pages/kfree Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 18/25] xen: allow privcmd for HVM guests Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 19/25] xen/arm: compile blkfront and blkback Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 20/25] xen/arm: compile netback Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 21/25] arm/v2m: initialize arch_timers even if v2m_timer is not present Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 22/25] xen/arm: use the __HVC macro Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 23/25] xen: missing includes Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 24/25] xen: update xen_add_to_physmap interface Stefano Stabellini
2012-08-16 15:36 ` [PATCH v3 25/25] [HACK] xen/arm: implement xen_remap_domain_mfn_range Stefano Stabellini
2012-09-13 17:15 ` [PATCH v3 00/23] Introduce Xen support on ARM Stefano Stabellini
2012-10-24 15:26 ` [PATCH RESEND] xen/arm: use the __HVC macro Stefano Stabellini
2012-11-05 10:58   ` Dave Martin

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=1345131377-14713-10-git-send-email-stefano.stabellini@eu.citrix.com \
    --to=stefano.stabellini@eu.citrix.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=arnd@arndb.de \
    --cc=catalin.marinas@arm.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linaro-dev@lists.linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tim@xen.org \
    --cc=xen-devel@lists.xensource.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®