[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v1 10/16] arm/vuart: merge vuart_print_char() with vuart_mmio_write()
From: Denis Mukhin <dmukhin@xxxxxxxx> Simplify code a bit since there's only one user of vuart_print_char(). No functional change. Signed-off-by: Denis Mukhin <dmukhin@xxxxxxxx> --- xen/arch/arm/vuart.c | 45 ++++++++++++++++++-------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) diff --git a/xen/arch/arm/vuart.c b/xen/arch/arm/vuart.c index d2f90ab0c64f..66fac6c994ce 100644 --- a/xen/arch/arm/vuart.c +++ b/xen/arch/arm/vuart.c @@ -1,7 +1,5 @@ /* SPDX-License-Identifier: GPL-2.0-or-later */ /* - * xen/arch/arm/vuart.c - * * Virtual UART Emulator. * * This emulator uses the information from dtuart. This is not intended to be @@ -21,6 +19,7 @@ * Ian Campbell <ian.campbell@xxxxxxxxxx> * Copyright (c) 2012 Citrix Systems. */ + #include <xen/lib.h> #include <xen/sched.h> #include <xen/errno.h> @@ -99,27 +98,6 @@ void domain_vuart_free(struct domain *d) } } -static void vuart_print_char(struct vcpu *v, char c) -{ - struct domain *d = v->domain; - struct vuart *uart = d->arch.vuart; - - if ( !is_console_printable(c) ) - return ; - - spin_lock(&uart->lock); - uart->buf[uart->idx++] = c; - if ( (uart->idx == (VUART_BUF_SIZE - 2)) || (c == '\n') ) - { - if ( c != '\n' ) - uart->buf[uart->idx++] = '\n'; - uart->buf[uart->idx] = '\0'; - printk(XENLOG_G_DEBUG "DOM%u: %s", d->domain_id, uart->buf); - uart->idx = 0; - } - spin_unlock(&uart->lock); -} - static int vuart_mmio_read(struct vcpu *v, mmio_info_t *info, register_t *r, void *priv) { @@ -145,12 +123,26 @@ static int vuart_mmio_write(struct vcpu *v, mmio_info_t *info, struct domain *d = v->domain; struct vuart *vdev = d->arch.vuart; paddr_t offset = info->gpa - vdev->info->base_addr; + char ch = r & 0xFF; /* ignore any status bits */ perfc_incr(vuart_writes); - if ( offset == vdev->info->data_off ) - /* ignore any status bits */ - vuart_print_char(v, r & 0xFF); + if ( !vdev || offset != vdev->info->data_off || !is_console_printable(ch) ) + return 1; + + spin_lock(&vdev->lock); + + vdev->buf[vdev->idx++] = ch; + if ( (vdev->idx == (VUART_BUF_SIZE - 2)) || (ch == '\n') ) + { + if ( ch != '\n' ) + vdev->buf[vdev->idx++] = '\n'; + vdev->buf[vdev->idx] = '\0'; + printk(XENLOG_G_DEBUG "DOM%u: %s", d->domain_id, vdev->buf); + vdev->idx = 0; + } + + spin_unlock(&vdev->lock); return 1; } @@ -163,4 +155,3 @@ static int vuart_mmio_write(struct vcpu *v, mmio_info_t *info, * indent-tabs-mode: nil * End: */ - -- 2.34.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |