patch "staging: comedi: addi_apci_1032: Fix endian problem for COS sample" added to staging-linus
Subsystems (2)
This is a note to let you know that I've just added the patch titled
staging: comedi: addi_apci_1032: Fix endian problem for COS sample
to my staging git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git
in the staging-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 8920b116495ab641a0e0350817157defa0d1ee53 Mon Sep 17 00:00:00 2001
From: Ian Abbott <[email protected]>
Date: Tue, 23 Feb 2021 14:30:42 +0000
Subject: staging: comedi: addi_apci_1032: Fix endian problem for COS sample
The Change-Of-State (COS) subdevice supports Comedi asynchronous commands to read 16-bit change-of-state values. However, the interrupt handler is calling comedi_buf_write_samples() with the address of a 32-bit integer &s->state. On bigendian architectures, it will copy 2 bytes from the wrong end of the 32-bit integer. Fix it by transferring the value via a 16-bit integer.
--- drivers/staging/comedi/drivers/addi_apci_1032.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/staging/comedi/drivers/addi_apci_1032.c +3 -1
@@ -260,6 +260,7 @@ static irqreturn_t apci1032_interrupt(int irq, void *d)struct apci1032_private *devpriv = dev->private;struct comedi_subdevice *s = dev->read_subdev;unsigned int ctrl; +unsigned short val;/* check interrupt is from this device */ if ((inl(devpriv->amcc_iobase + AMCC_OP_REG_INTCSR) &
@@ -275,7 +276,8 @@ static irqreturn_t apci1032_interrupt(int irq, void *d)outl (ctrl & ~APCI1032_CTRL_INT_ENA , dev->iobase +APCI1032_CTRL_REG ); s->state =inl (dev->iobase +APCI1032_STATUS_REG ) &0xffff ; -comedi_buf_write_samples (s, &s->state,1 ); + val = s->state; +comedi_buf_write_samples (s, &val,1 );comedi_handle_events (dev, s);/* enable the interrupt */
Signature · 1 line
2.30.1