Commit 6ec80302 authored by Heiko Carstens's avatar Heiko Carstens Committed by Vasily Gorbik

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: f058599e ("s390/pci: Fix s390_mmio_read/write with MIO")
Reviewed-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
Signed-off-by: default avatarHeiko Carstens <hca@linux.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent a262d3ad
...@@ -64,7 +64,7 @@ static inline int __pcistg_mio_inuser( ...@@ -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( ...@@ -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( ...@@ -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),
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment