s390/pci: add missing EX_TABLE entries to __pcistg_mio_inuser()/__pcilg_mio_inuser()
For some exception types the instruction address points behind the
instruction that caused the exception. Take that into account and add
the missing exception table entry.
Cc: <stable@vger.kernel.org>
Fixes: f058599e22
("s390/pci: Fix s390_mmio_read/write with MIO")
Reviewed-by: Niklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
This commit is contained in:
parent
a262d3ad6a
commit
6ec803025c
@ -64,7 +64,7 @@ static inline int __pcistg_mio_inuser(
|
|||||||
asm volatile (
|
asm volatile (
|
||||||
" sacf 256\n"
|
" sacf 256\n"
|
||||||
"0: llgc %[tmp],0(%[src])\n"
|
"0: llgc %[tmp],0(%[src])\n"
|
||||||
" sllg %[val],%[val],8\n"
|
"4: sllg %[val],%[val],8\n"
|
||||||
" aghi %[src],1\n"
|
" aghi %[src],1\n"
|
||||||
" ogr %[val],%[tmp]\n"
|
" ogr %[val],%[tmp]\n"
|
||||||
" brctg %[cnt],0b\n"
|
" brctg %[cnt],0b\n"
|
||||||
@ -72,7 +72,7 @@ static inline int __pcistg_mio_inuser(
|
|||||||
"2: ipm %[cc]\n"
|
"2: ipm %[cc]\n"
|
||||||
" srl %[cc],28\n"
|
" srl %[cc],28\n"
|
||||||
"3: sacf 768\n"
|
"3: sacf 768\n"
|
||||||
EX_TABLE(0b, 3b) EX_TABLE(1b, 3b) EX_TABLE(2b, 3b)
|
EX_TABLE(0b, 3b) EX_TABLE(4b, 3b) EX_TABLE(1b, 3b) EX_TABLE(2b, 3b)
|
||||||
:
|
:
|
||||||
[src] "+a" (src), [cnt] "+d" (cnt),
|
[src] "+a" (src), [cnt] "+d" (cnt),
|
||||||
[val] "+d" (val), [tmp] "=d" (tmp),
|
[val] "+d" (val), [tmp] "=d" (tmp),
|
||||||
@ -215,10 +215,10 @@ static inline int __pcilg_mio_inuser(
|
|||||||
"2: ahi %[shift],-8\n"
|
"2: ahi %[shift],-8\n"
|
||||||
" srlg %[tmp],%[val],0(%[shift])\n"
|
" srlg %[tmp],%[val],0(%[shift])\n"
|
||||||
"3: stc %[tmp],0(%[dst])\n"
|
"3: stc %[tmp],0(%[dst])\n"
|
||||||
" aghi %[dst],1\n"
|
"5: aghi %[dst],1\n"
|
||||||
" brctg %[cnt],2b\n"
|
" brctg %[cnt],2b\n"
|
||||||
"4: sacf 768\n"
|
"4: sacf 768\n"
|
||||||
EX_TABLE(0b, 4b) EX_TABLE(1b, 4b) EX_TABLE(3b, 4b)
|
EX_TABLE(0b, 4b) EX_TABLE(1b, 4b) EX_TABLE(3b, 4b) EX_TABLE(5b, 4b)
|
||||||
:
|
:
|
||||||
[ioaddr_len] "+&d" (ioaddr_len.pair),
|
[ioaddr_len] "+&d" (ioaddr_len.pair),
|
||||||
[cc] "+d" (cc), [val] "=d" (val),
|
[cc] "+d" (cc), [val] "=d" (val),
|
||||||
|
Loading…
Reference in New Issue
Block a user