[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3] ns16550: add support for polling mode when device tree is used
On Tue, 2023-07-25 at 10:18 +0200, Jan Beulich wrote: > On 25.07.2023 10:15, Oleksii wrote: > > On Mon, 2023-07-24 at 16:43 +0200, Jan Beulich wrote: > > > On 24.07.2023 16:27, Oleksii Kurochko wrote: > > > > @@ -1330,9 +1341,12 @@ pci_uart_config(struct ns16550 *uart, > > > > bool_t > > > > skip_amt, unsigned int idx) > > > > * as special only for X86. > > > > */ > > > > if ( uart->irq == 0xff ) > > > > + { > > > > uart->irq = 0; > > > > + uart->intr_works = polling; > > > > + } > > > > #endif > > > > - if ( !uart->irq ) > > > > + if ( !uart->irq || (uart->intr_works == > > > > polling) ) > > > > printk(XENLOG_INFO > > > > "ns16550: %pp: no legacy IRQ, using > > > > poll mode\n", > > > > &PCI_SBDF(0, b, d, f)); > > > > > > Message and code (after your addition) continue to be out of > > > sync. > > > As said before, any condition that leads to polling mode wants to > > > find itself expressed by uart->intr_works set to "polling". > > Well. It looks like it would be better to set 'uart->intr_works = > > polling' inside if ( !uart->irq ): > > if ( !uart->irq || (uart->intr_works == polling) ) > > { > > uart->intr_works = polling; > > printk(XENLOG_INFO > > "ns16550: %pp: using poll mode\n", > > &PCI_SBDF(0, b, d, f)); > > } > > Then "uart->intr_works = polling;" can be removed from "if ( uart- > > >irq > > == 0xff )" as in that case 'uart->irq = 0' means polling mode for > > X86. > > I'm not fully convinced. Care needs to be taken that both the x86 > case > and the general case continue to function as they did (unless proven > to > be buggy). But it continues to work as it worked before ( when uart->intr_works != polling ) otherwise, if uart->intr_works = polling, then polling mode is forced. The only thing that I would probably add it is to force polling mode in case of X86 when polling mode is forced by command line: if ( ( uart->irq == 0xff ) || (uart->intr_works == polling) ) { uart->irq = 0; uart->intr_works = polling; } But this check looks a little bit unnecessary because if the polling mode is forced or not will be checked later in the next if condition. ~ Oleksii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |