Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1369605 > unrolled thread

[PATCH v3 6/7] drivers:hv: Record MMIO range in use by frame buffer

Started byJake Oshins <jakeo@microsoft.com>
First post2016-04-01 23:40 +0200
Last post2016-04-02 00:20 +0200
Articles 3 — 2 participants

Back to article view | Back to linux.kernel

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  [PATCH v3 6/7] drivers:hv: Record MMIO range in use by frame buffer Jake Oshins <jakeo@microsoft.com> - 2016-04-01 23:40 +0200
    Re: [PATCH v3 6/7] drivers:hv: Record MMIO range in use by frame  buffer kbuild test robot <lkp@intel.com> - 2016-04-02 00:20 +0200
    [PATCH] drivers:hv: fix resource_size.cocci warnings kbuild test robot <lkp@intel.com> - 2016-04-02 00:20 +0200

#1369605 — [PATCH v3 6/7] drivers:hv: Record MMIO range in use by frame buffer

FromJake Oshins <jakeo@microsoft.com>
Date2016-04-01 23:40 +0200
Subject[PATCH v3 6/7] drivers:hv: Record MMIO range in use by frame buffer
Message-ID<rjeXo-1OQ-21@gated-at.bofh.it>
Later in the boot sequence, we need to figure out which memory
ranges can be given out to various paravirtual drivers.  The
hyperv_fb driver should, ideally, be placed right on top of
the frame buffer, without some other device getting plopped on
top of this range in the meantime.  Recording this now allows
that to be guaranteed.

Signed-off-by: Jake Oshins <jakeo@microsoft.com>
---
 drivers/hv/vmbus_drv.c | 37 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
index dfc6149..df59bfb 100644
--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -41,6 +41,7 @@
 #include <linux/ptrace.h>
 #include <linux/screen_info.h>
 #include <linux/kdebug.h>
+#include <linux/efi.h>
 #include "hyperv_vmbus.h"
 
 static struct acpi_device  *hv_acpi_dev;
@@ -101,6 +102,8 @@ static struct notifier_block hyperv_panic_block = {
 	.notifier_call = hyperv_panic_event,
 };
 
+static const char *fb_mmio_name = "fb_range";
+static struct resource *fb_mmio;
 struct resource *hyperv_mmio;
 DEFINE_SEMAPHORE(hyperv_mmio_lock);
 
@@ -1091,6 +1094,12 @@ static int vmbus_acpi_remove(struct acpi_device *device)
 	struct resource *next_res;
 
 	if (hyperv_mmio) {
+		if (fb_mmio) {
+			__release_region(hyperv_mmio, fb_mmio->start,
+					 fb_mmio->end - fb_mmio->start + 1);
+			fb_mmio = NULL;
+		}
+
 		for (cur_res = hyperv_mmio; cur_res; cur_res = next_res) {
 			next_res = cur_res->sibling;
 			kfree(cur_res);
@@ -1100,6 +1109,30 @@ static int vmbus_acpi_remove(struct acpi_device *device)
 	return 0;
 }
 
+static void vmbus_reserve_fb(void)
+{
+	int size;
+	/*
+	 * Make a claim for the frame buffer in the resource tree under the
+	 * first node, which will be the one below 4GB.  The length seems to
+	 * be underreported, particularly in a Generation 1 VM.  So start out
+	 * reserving a larger area and make it smaller until it succeeds.
+	 */
+
+	if (screen_info.lfb_base) {
+		if (efi_enabled(EFI_BOOT))
+			size = max_t(__u32, screen_info.lfb_size, 0x800000);
+		else
+			size = max_t(__u32, screen_info.lfb_size, 0x4000000);
+
+		for (; !fb_mmio && (size >= 0x100000); size >>= 1) {
+			fb_mmio = __request_region(hyperv_mmio,
+						   screen_info.lfb_base, size,
+						   fb_mmio_name, 0);
+		}
+	}
+}
+
 /**
  * vmbus_allocate_mmio() - Pick a memory-mapped I/O range.
  * @new:		If successful, supplied a pointer to the
@@ -1261,8 +1294,10 @@ static int vmbus_acpi_add(struct acpi_device *device)
 
 		if (ACPI_FAILURE(result))
 			continue;
-		if (hyperv_mmio)
+		if (hyperv_mmio) {
+			vmbus_reserve_fb();
 			break;
+		}
 	}
 	ret_val = 0;
 
-- 
1.9.1

[toc] | [next] | [standalone]


#1369630 — Re: [PATCH v3 6/7] drivers:hv: Record MMIO range in use by frame buffer

Fromkbuild test robot <lkp@intel.com>
Date2016-04-02 00:20 +0200
SubjectRe: [PATCH v3 6/7] drivers:hv: Record MMIO range in use by frame buffer
Message-ID<rjfA6-2lK-13@gated-at.bofh.it>
In reply to#1369605
Hi Jake,

[auto build test WARNING on v4.6-rc1]
[also build test WARNING on next-20160401]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

url:    https://github.com/0day-ci/linux/commits/Jake-Oshins/drivers-hv-Ensure-that-bridge-windows-don-t-overlap/20160402-053702


coccinelle warnings: (new ones prefixed by >>)

>> drivers/hv/vmbus_drv.c:1099:15-18: ERROR: Missing resource_size with fb_mmio

Please review and possibly fold the followup patch.

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[toc] | [prev] | [next] | [standalone]


#1369631 — [PATCH] drivers:hv: fix resource_size.cocci warnings

Fromkbuild test robot <lkp@intel.com>
Date2016-04-02 00:20 +0200
Subject[PATCH] drivers:hv: fix resource_size.cocci warnings
Message-ID<rjfA6-2lK-21@gated-at.bofh.it>
In reply to#1369605
drivers/hv/vmbus_drv.c:1099:15-18: ERROR: Missing resource_size with fb_mmio


 Use resource_size function on resource object
 instead of explicit computation.

Generated by: scripts/coccinelle/api/resource_size.cocci

CC: Jake Oshins <jakeo@microsoft.com>
Signed-off-by: Fengguang Wu <fengguang.wu@intel.com>
---

 vmbus_drv.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

--- a/drivers/hv/vmbus_drv.c
+++ b/drivers/hv/vmbus_drv.c
@@ -1096,7 +1096,7 @@ static int vmbus_acpi_remove(struct acpi
 	if (hyperv_mmio) {
 		if (fb_mmio) {
 			__release_region(hyperv_mmio, fb_mmio->start,
-					 fb_mmio->end - fb_mmio->start + 1);
+					 resource_size(fb_mmio));
 			fb_mmio = NULL;
 		}
 

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web