[PATCH v1 1/1] hvc_console: Allow backends to set I/O buffer size
Christophe Leroy
christophe.leroy at csgroup.eu
Tue Feb 20 19:09:25 AEDT 2024
Hi,
Le 15/01/2023 à 20:56, Geoff Levand a écrit :
> To allow HVC backends to set the I/O buffer sizes to values that are most
> efficient for the backend, change the macro definitions where the buffer sizes
> are set to be conditional on whether or not the macros are already defined.
> Also, rename the macros from N_OUTBUF to HVC_N_OUBUF and from N_INBUF to
> HVC_N_INBUF.
>
> Typical usage in the backend source file would be:
>
> #define HVC_N_OUTBUF 32
> #define HVC_N_INBUF 32
> #include "hvc_console.h"
>
> Signed-off-by: Geoff Levand <geoff at infradead.org>
Most patches in drivers/tty/hvc/ are merged by greg through the serial
tree, you should send to him.
And I think it is not correct to send that as pull request.
Christophe
> ---
>
> Hi,
>
> With this patch the buffer sizes are set by defining preprocessor macros before
> including the hvc_console.h header file. Another way would be to have Kconfig
> options for the buffer sizes. Since the optimal buffer size is so closely tied
> to the backend implementation I thought that using these preprocessor macros
> would be the better way.
>
> -Geoff
>
> The following changes since commit 5dc4c995db9eb45f6373a956eb1f69460e69e6d4:
>
> Linux 6.2-rc4 (2023-01-15 09:22:43 -0600)
>
> are available in the Git repository at:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/geoff/ps3-linux.git for-merge-hvc-v1
>
> for you to fetch changes up to 8f3cd1e0589f134380f80a1f551c8232ed0bc1f2:
>
> hvc_console: Allow backends to set I/O buffer size (2023-01-15 09:36:22 -0800)
>
>
> drivers/tty/hvc/hvc_console.c | 19 +++++++++++--------
> 1 file changed, 11 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/tty/hvc/hvc_console.c b/drivers/tty/hvc/hvc_console.c
> index a683e21df19c..f7809d19e2cd 100644
> --- a/drivers/tty/hvc/hvc_console.c
> +++ b/drivers/tty/hvc/hvc_console.c
> @@ -42,12 +42,15 @@
> #define HVC_CLOSE_WAIT (HZ/100) /* 1/10 of a second */
>
> /*
> - * These sizes are most efficient for vio, because they are the
> - * native transfer size. We could make them selectable in the
> - * future to better deal with backends that want other buffer sizes.
> + * These default sizes are most efficient for vio, because they are
> + * the native transfer size.
> */
> -#define N_OUTBUF 16
> -#define N_INBUF 16
> +#if !defined(HVC_N_OUTBUF)
> +# define HVC_N_OUTBUF 16
> +#endif
> +#if !defined(HVC_N_INBUF)
> +# define HVC_N_INBUF 16
> +#endif
>
> #define __ALIGNED__ __attribute__((__aligned__(L1_CACHE_BYTES)))
>
> @@ -151,7 +154,7 @@ static uint32_t vtermnos[MAX_NR_HVC_CONSOLES] =
> static void hvc_console_print(struct console *co, const char *b,
> unsigned count)
> {
> - char c[N_OUTBUF] __ALIGNED__;
> + char c[HVC_N_OUTBUF] __ALIGNED__;
> unsigned i = 0, n = 0;
> int r, donecr = 0, index = co->index;
>
> @@ -633,7 +636,7 @@ static int __hvc_poll(struct hvc_struct *hp, bool may_sleep)
> {
> struct tty_struct *tty;
> int i, n, count, poll_mask = 0;
> - char buf[N_INBUF] __ALIGNED__;
> + char buf[HVC_N_INBUF] __ALIGNED__;
> unsigned long flags;
> int read_total = 0;
> int written_total = 0;
> @@ -674,7 +677,7 @@ static int __hvc_poll(struct hvc_struct *hp, bool may_sleep)
>
> read_again:
> /* Read data if any */
> - count = tty_buffer_request_room(&hp->port, N_INBUF);
> + count = tty_buffer_request_room(&hp->port, HVC_N_INBUF);
>
> /* If flip is full, just reschedule a later read */
> if (count == 0) {
More information about the Linuxppc-dev
mailing list