On 05.02.2024 14:27, Jan Beulich wrote:
> In preparation of dropping the register parameters from
> serial_[rt]x_interrupt() and in turn from IRQ handler functions,
> register state needs making available another way for the few key
> handlers which need it. Fake IRQ-like state.
>
> Signed-off-by: Jan Beulich <[email protected]>
> ---
> The use of guest_cpu_user_regs() in dbc_uart_poll() is inconsistent with
> other console poll functions we have, and it's unclear whether that's
> actually generally correct.
It occurs to me that due to this behavior, ...
> --- a/xen/drivers/char/xhci-dbc.c
> +++ b/xen/drivers/char/xhci-dbc.c
> @@ -1164,6 +1164,7 @@ static void cf_check dbc_uart_poll(void
> struct dbc_uart *uart = port->uart;
> struct dbc *dbc = &uart->dbc;
> unsigned long flags = 0;
> + struct cpu_user_regs *old_regs;
>
> if ( spin_trylock_irqsave(&port->tx_lock, flags) )
> {
> @@ -1175,10 +1176,15 @@ static void cf_check dbc_uart_poll(void
> spin_unlock_irqrestore(&port->tx_lock, flags);
> }
>
> + /* Mimic interrupt context. */
> + old_regs = set_irq_regs(guest_cpu_user_regs());
> +
> while ( dbc_work_ring_size(&dbc->dbc_iwork) )
> serial_rx_interrupt(port, guest_cpu_user_regs());
>
> serial_tx_interrupt(port, guest_cpu_user_regs());
> +
> + set_irq_regs(old_regs);
> set_timer(&uart->timer, NOW() + MICROSECS(DBC_POLL_INTERVAL));
> }
>
>
... this ought to be unnecessary, considering what dump_registers()
is changed to in patch 2.
Jan