s390/pci: add missing EX_TABLE entries to __pcistg_mio_inuser()/__pcilg_mio_inuser()
commit 6ec803025cf3173a57222e4411097166bd06fa98 upstream.
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
fe187c801a
commit
467230b9ef
@@ -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),
|
||||||
@@ -222,10 +222,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)
|
||||||
:
|
:
|
||||||
[cc] "+d" (cc), [val] "=d" (val), [len] "+d" (len),
|
[cc] "+d" (cc), [val] "=d" (val), [len] "+d" (len),
|
||||||
[dst] "+a" (dst), [cnt] "+d" (cnt), [tmp] "=d" (tmp),
|
[dst] "+a" (dst), [cnt] "+d" (cnt), [tmp] "=d" (tmp),
|
||||||
|
Reference in New Issue
Block a user