On 06/19/2013 03:01 AM, Arnd Bergmann wrote:
On Tuesday 18 June 2013 12:12:53 David Daney wrote:+static unsigned int dw8250_serial_inq(struct uart_port *p, int offset) +{ + offset <<= p->regshift; + + return (u8)__raw_readq(p->membase + offset); +} + +static void dw8250_serial_outq(struct uart_port *p, int offset, int value) +{ + struct dw8250_data *d = p->private_data; + + if (offset == UART_LCR) + d->last_lcr = value; + + offset <<= p->regshift; + __raw_writeq(value, p->membase + offset); + dw8250_serial_inq(p, UART_LCR); +}This breaks building on 32 bit architectures as I found on my daily ARM builds: __raw_writeq cannot be defined on architectures that don't have native 64 bit data access instructions.
I will rework the patch to avoid this problem.
It's also wrong to use the __raw_* variant, which is not guaranteed to be atomic and is not endian-safe.
We do runtime probing and only use this function on platforms where it is appropriate, so atomicity is not an issue. As for endianess, I used the __raw_ variant precisely because it is correct for both big and little endian kernels.
David Daney -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/

