Messages in this thread | | | Subject | Re: [PATCH] serial: 8250_dw: fix wrong logic in dw8250_check_lcr() | From | Andy Shevchenko <> | Date | Fri, 01 Apr 2016 12:58:03 +0300 |
| |
On Fri, 2016-04-01 at 17:06 +0800, Kefeng Wang wrote: > Commit cdcea058e510("serial: 8250_dw: Avoid serial_outx code > duplicate > with new dw8250_check_lcr()") introduce a wrong logic when write val > to > LCR reg. When CONFIG_64BIT enabled, __raw_writeq is used > unconditionally. > > But for !PORT_OCTEON, we better to use coincident write func. > > Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com> > --- > > We met following calltrace twice, if the change is not necessary, > correct me, > and any advice will be appreciated, thanks.
So, does this fix you issue? If it does than perhaps you need to Cc stable@ and put Fixes tag as well.
> --- a/drivers/tty/serial/8250/8250_dw.c > +++ b/drivers/tty/serial/8250/8250_dw.c > @@ -104,15 +104,16 @@ static void dw8250_check_lcr(struct uart_port > *p, int value) > dw8250_force_idle(p); > > #ifdef CONFIG_64BIT > - __raw_writeq(value & 0xff, offset); > -#else > + if (p->type == PORT_OCTEON) > + __raw_writeq(value & 0xff, offset); > + else > +#endif
You may also get rid of this one, like
if (IS_ENABLED(CONFIG_64BIT) && p->type == PORT_OCTEON) ... else if ...
> if (p->iotype == UPIO_MEM32) > writel(value, offset); > else if (p->iotype == UPIO_MEM32BE) > iowrite32be(value, offset); > else > writeb(value, offset); > -#endif > } > /* > * FIXME: this deadlocks if port->lock is already held
-- Andy Shevchenko <andriy.shevchenko@linux.intel.com> Intel Finland Oy
| |