Thread (39 messages) 39 messages, 2 authors, 2009-12-15

Re: [PATCH 08/28] virtio: console: remove global var

From: Amit Shah <hidden>
Date: 2009-11-30 05:45:33

On (Mon) Nov 30 2009 [12:27:21], Rusty Russell wrote:
On Sat, 28 Nov 2009 05:20:31 pm Amit Shah wrote:
quoted
From: Rusty Russell <redacted>

Now we can use an allocation function to remove our global console variable.

Signed-off-by: Rusty Russell <redacted>
Signed-off-by: Amit Shah <redacted>
---
 drivers/char/virtio_console.c |   70 +++++++++++++++++++++++++++-------------
 1 files changed, 47 insertions(+), 23 deletions(-)
diff --git a/drivers/char/virtio_console.c b/drivers/char/virtio_console.c
index c133bf6..98a5249 100644
--- a/drivers/char/virtio_console.c
+++ b/drivers/char/virtio_console.c
@@ -32,6 +32,18 @@
  * across multiple devices and multiple ports per device.
  */
 struct ports_driver_data {
+	/*
+	 * This is used to keep track of the number of hvc consoles
+	 * spawned by this driver.  This number is given as the first
+	 * argument to hvc_alloc().  To correctly map an initial
+	 * console spawned via hvc_instantiate to the console being
+	 * hooked up via hvc_alloc, we need to pass the same vtermno.
+	 *
+	 * We also just assume the first console being initialised was
+	 * the first one that got used as the initial console.
+	 */
+	unsigned int next_vtermno;
Let's just make this a global?
There will be a few more globals introduced in the next few patches, so
I just put all the globals in a new struct to keep them in one place.
quoted
+static struct port *__devinit add_port(u32 vtermno)
+{
+	struct port *port;
+
+	port = kzalloc(sizeof *port, GFP_KERNEL);
+	if (!port)
+		return NULL;
+
+	port->used_len = port->offset = 0;
+	port->inbuf = kmalloc(PAGE_SIZE, GFP_KERNEL);
+	if (!port->inbuf) {
+		kfree(port);
+		return NULL;
+	}
+	port->hvc = NULL;
+	port->vtermno = vtermno;
+	return port;
+}
Rename this to add_console_port(),
I do that later (in patch 15), splitting this off into
init_console_port().
and split off the core part which
does ->port setup into "int setup_port(struct port *)" for later re-use?
yeah; this function then becomes the core port init routine in patch 15.
quoted
+static void free_port(struct port *port)
+{
+	kfree(port->inbuf);
+	kfree(port);
+}
Similarly, free_console_port/free_port?
This comes with port hot unplug support later in the series. This part
is again what I left intact from your series.
quoted
+	err = -ENOMEM;
+	port = add_port(pdrvdata.next_vtermno);
+	if (!port)
+		goto fail;
I realize other coders do this pre-init, and it saves a line, but it also
means that you don't get a warning about err being uninitialized if it doesn't
get set correctly later on.

So I prefer:
	port = add...
	if (!port) {
		err = -ENOMEM;
		goto fail;
	}
Sure; I can do that. I just made sure all the style was consistent.

		Amit
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help