mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: Timur Tabi <timur@freescale.com>
Cc: <kumar.gala@freescale.com>, <benh@kernel.crashing.org>,
	<greg@kroah.com>, <akpm@kernel.org>,
	<linuxppc-dev@lists.ozlabs.org>, <linux-kernel@vger.kernel.org>,
	<linux-console@vger.kernel.org>
Subject: Re: [PATCH 6/7] tty/powerpc: introduce the ePAPR embedded hypervisor byte channel driver
Date: Thu, 19 May 2011 15:33:58 +0100	[thread overview]
Message-ID: <20110519153358.5876f310@lxorguk.ukuu.org.uk> (raw)
In-Reply-To: <1305813272-31826-7-git-send-email-timur@freescale.com>


> +	struct tty_struct *ttys;

ttys are refcounted and you have a refcounted pointer for free in your
tty_port that is maintained by the tty_port logic, as well as it
providing ref counted, properly locked handling for the reference.



> +/******************************** TTY DRIVER ********************************/
> +
> +/*
> + * byte channel receive interupt handler
> + *
> + * This ISR is called whenever data is available on a byte channel.
> + */
> +static irqreturn_t ehv_bc_tty_rx_isr(int irq, void *data)
> +{
> +	struct ehv_bc_data *bc = data;
> +	struct tty_struct *ttys = bc->ttys;

ttys = tty_port_tty_get(&bc->port);
stuff
if (ttys != NULL)
	tty stuff
	tty_kref_put(ttys);

> +	ev_byte_channel_poll(bc->handle, &rx_count, &tx_count);
> +	count = tty_buffer_request_room(ttys, rx_count);
> +
> +	/* 'count' is the maximum amount of data the TTY layer can accept at
> +	 * this time.  However, during testing, I was never able to get 'count'
> +	 * to be less than 'rx_count'.  I'm not sure whether I'm calling it
> +	 * correctly.

It will try hard to fulfill your request until 64K is queued. Before that
point your only expected failure is when the system kmalloc for
GFP_ATOMIC fails, which is an extreme situation.

> +		/* Pass the received data to the tty layer.  Note that this
> +		 * function calls tty_buffer_request_room(), so I'm not sure if
> +		 * we should have also called tty_buffer_request_room().
> +		 */
> +		ret = tty_insert_flip_string(ttys, buffer, len);

You only need to request_room in advance if you can't handle the case
where the insert_flip_string returns less than you stuffed down it.

> +		len = min_t(unsigned int,
> +			    CIRC_CNT_TO_END(bc->head, bc->tail, BUF_SIZE),
> +			    EV_BYTE_CHANNEL_MAX_BYTES);

The kfifo API is probably faster and cleaner. Much of tty still uses
CIRC_* because they predate the new APIs.


> + * This ISR is called whenever space becomes available for transmitting
> + * characters on a byte channel.
> + */
> +static irqreturn_t ehv_bc_tty_tx_isr(int irq, void *data)
> +{
> +	struct ehv_bc_data *bc = data;
> +
> +	ehv_bc_tx_dequeue(bc);
> +	tty_wakeup(bc->ttys);

Again tty krefs/locking

> +/* This function can be called multiple times for a given tty_struct, which is
> + * why we initialize bc->ttys in ehv_bc_tty_port_activate() instead.
> + *
> + * For some reason, the tty layer will still call this function even if the
> + * device was not registered (i.e. tty_register_device() was not called).  So
> + * we need to check for that.

[Because register_device is optional and some legacy drivers still don't
use it]

You really also need a hangup method so vhangup() does the right thing
and you can securely do logins etc and sessions on your console. As
you've got no hardware entangled in this and you already use tty_port
helpers the hangup helper will do the work for you.

I guess the only other thing to consider is whether you want to implement
a SYSRQ interface on your console ?



  parent reply	other threads:[~2011-05-19 14:35 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-05-19 13:54 [PATCH 0/7] This patchset adds support for running Linux under the Freescale hypervisor, Timur Tabi
2011-05-19 13:54 ` [PATCH 1/7] powerpc: make irq_choose_cpu() available to all PIC drivers Timur Tabi
2011-06-22 11:41   ` Kumar Gala
2011-05-19 13:54 ` [PATCH 2/7] powerpc: introduce ePAPR embedded hypervisor hcall interface Timur Tabi
2011-06-22 11:41   ` Kumar Gala
2011-05-19 13:54 ` [PATCH 3/7] powerpc: introduce the ePAPR embedded hypervisor vmpic driver Timur Tabi
2011-06-22 11:41   ` Kumar Gala
2011-05-19 13:54 ` [PATCH 4/7] powerpc: add Freescale hypervisor partition control functions Timur Tabi
2011-06-22 11:41   ` Kumar Gala
2011-05-19 13:54 ` [PATCH 5/7] powerpc/85xx: add board support for the Freescale hypervisor Timur Tabi
2011-06-22 11:42   ` Kumar Gala
2011-05-19 13:54 ` [PATCH 6/7] tty/powerpc: introduce the ePAPR embedded hypervisor byte channel driver Timur Tabi
2011-05-19 14:22   ` Greg KH
2011-05-19 14:27     ` Timur Tabi
2011-05-19 14:36     ` Alan Cox
2011-05-19 14:33   ` Alan Cox [this message]
2011-05-19 15:14     ` Timur Tabi
2011-05-19 15:50       ` Alan Cox
2011-05-19 15:54         ` Timur Tabi
2011-05-19 16:00           ` Alan Cox
2011-05-19 16:02           ` Greg KH
2011-05-19 16:18             ` Timur Tabi
2011-05-19 16:05     ` Timur Tabi
2011-05-20  9:54       ` Alan Cox
2011-05-19 16:31     ` Timur Tabi
2011-05-19 17:25       ` Alan Cox
2011-05-19 15:02   ` Arnd Bergmann
2011-05-19 15:09     ` Timur Tabi
2011-05-19 13:54 ` [PATCH 7/7] drivers/misc: introduce Freescale hypervisor management driver Timur Tabi
2011-05-19 13:56 ` [PATCH 0/7] This patchset adds support for running Linux under the Freescale hypervisor, Timur Tabi
2011-05-20 20:29 ` Kumar Gala
2011-05-23 21:09   ` Tabi Timur-B04825
2011-05-23 22:27     ` Kumar Gala

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=20110519153358.5876f310@lxorguk.ukuu.org.uk \
    --to=alan@lxorguk.ukuu.org.uk \
    --cc=akpm@kernel.org \
    --cc=benh@kernel.crashing.org \
    --cc=greg@kroah.com \
    --cc=kumar.gala@freescale.com \
    --cc=linux-console@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=timur@freescale.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®