Of course, if Alan is OK with this, I'm more than OK too. :-)
It may well be better.
(But the polling routines would need to clear all interrupts, not just rx/tx. For example, if the controller indicated some error, and nobody clears it, then we'll start reentering infinitely.)
For a lot of devices and platforms you'd probably mask them instead ?
If you use a clear_irqs callback, you can drop characters if one arrives between the last character buffer read and calling clear_irqs.
Only if we call clear_irqs() after reading the characters, but we do it before. So if new characters are available, we will reenter NMI, which is OK.
Recursively or not... again you get platform specific magic in places we don't want.
In the driver poll method for most uarts is going to be at least buried in what is usually arch specific uarts.