Skip to content

Commit be84a46

Browse files
committed
Merge branch 'parisc-4.11-4' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux
Pull parisc fix from Helge Deller: "Mikulas Patocka fixed a few bugs in our new pa_memcpy() assembler function, e.g. one bug made the kernel unbootable if source and destination address are the same" * 'parisc-4.11-4' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux: parisc: fix bugs in pa_memcpy
2 parents 1ec1688 + 409c1b2 commit be84a46

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

arch/parisc/lib/lusercopy.S

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ ENTRY_CFI(pa_memcpy)
201201
add dst,len,end
202202

203203
/* short copy with less than 16 bytes? */
204-
cmpib,>>=,n 15,len,.Lbyte_loop
204+
cmpib,COND(>>=),n 15,len,.Lbyte_loop
205205

206206
/* same alignment? */
207207
xor src,dst,t0
@@ -216,7 +216,7 @@ ENTRY_CFI(pa_memcpy)
216216
/* loop until we are 64-bit aligned */
217217
.Lalign_loop64:
218218
extru dst,31,3,t1
219-
cmpib,=,n 0,t1,.Lcopy_loop_16
219+
cmpib,=,n 0,t1,.Lcopy_loop_16_start
220220
20: ldb,ma 1(srcspc,src),t1
221221
21: stb,ma t1,1(dstspc,dst)
222222
b .Lalign_loop64
@@ -225,6 +225,7 @@ ENTRY_CFI(pa_memcpy)
225225
ASM_EXCEPTIONTABLE_ENTRY(20b,.Lcopy_done)
226226
ASM_EXCEPTIONTABLE_ENTRY(21b,.Lcopy_done)
227227

228+
.Lcopy_loop_16_start:
228229
ldi 31,t0
229230
.Lcopy_loop_16:
230231
cmpb,COND(>>=),n t0,len,.Lword_loop
@@ -267,7 +268,7 @@ ENTRY_CFI(pa_memcpy)
267268
/* loop until we are 32-bit aligned */
268269
.Lalign_loop32:
269270
extru dst,31,2,t1
270-
cmpib,=,n 0,t1,.Lcopy_loop_4
271+
cmpib,=,n 0,t1,.Lcopy_loop_8
271272
20: ldb,ma 1(srcspc,src),t1
272273
21: stb,ma t1,1(dstspc,dst)
273274
b .Lalign_loop32
@@ -277,7 +278,7 @@ ENTRY_CFI(pa_memcpy)
277278
ASM_EXCEPTIONTABLE_ENTRY(21b,.Lcopy_done)
278279

279280

280-
.Lcopy_loop_4:
281+
.Lcopy_loop_8:
281282
cmpib,COND(>>=),n 15,len,.Lbyte_loop
282283

283284
10: ldw 0(srcspc,src),t1
@@ -299,7 +300,7 @@ ENTRY_CFI(pa_memcpy)
299300
ASM_EXCEPTIONTABLE_ENTRY(16b,.Lcopy_done)
300301
ASM_EXCEPTIONTABLE_ENTRY(17b,.Lcopy_done)
301302

302-
b .Lcopy_loop_4
303+
b .Lcopy_loop_8
303304
ldo -16(len),len
304305

305306
.Lbyte_loop:
@@ -324,7 +325,7 @@ ENTRY_CFI(pa_memcpy)
324325
.Lunaligned_copy:
325326
/* align until dst is 32bit-word-aligned */
326327
extru dst,31,2,t1
327-
cmpib,COND(=),n 0,t1,.Lcopy_dstaligned
328+
cmpib,=,n 0,t1,.Lcopy_dstaligned
328329
20: ldb 0(srcspc,src),t1
329330
ldo 1(src),src
330331
21: stb,ma t1,1(dstspc,dst)
@@ -362,7 +363,7 @@ ENTRY_CFI(pa_memcpy)
362363
cmpiclr,<> 1,t0,%r0
363364
b,n .Lcase1
364365
.Lcase0:
365-
cmpb,= %r0,len,.Lcda_finish
366+
cmpb,COND(=) %r0,len,.Lcda_finish
366367
nop
367368

368369
1: ldw,ma 4(srcspc,src), a3
@@ -376,7 +377,7 @@ ENTRY_CFI(pa_memcpy)
376377
1: ldw,ma 4(srcspc,src), a3
377378
ASM_EXCEPTIONTABLE_ENTRY(1b,.Lcda_rdfault)
378379
ldo -1(len),len
379-
cmpb,=,n %r0,len,.Ldo0
380+
cmpb,COND(=),n %r0,len,.Ldo0
380381
.Ldo4:
381382
1: ldw,ma 4(srcspc,src), a0
382383
ASM_EXCEPTIONTABLE_ENTRY(1b,.Lcda_rdfault)
@@ -402,7 +403,7 @@ ENTRY_CFI(pa_memcpy)
402403
1: stw,ma t0, 4(dstspc,dst)
403404
ASM_EXCEPTIONTABLE_ENTRY(1b,.Lcopy_done)
404405
ldo -4(len),len
405-
cmpb,<> %r0,len,.Ldo4
406+
cmpb,COND(<>) %r0,len,.Ldo4
406407
nop
407408
.Ldo0:
408409
shrpw a2, a3, %sar, t0
@@ -436,14 +437,14 @@ ENTRY_CFI(pa_memcpy)
436437
/* fault exception fixup handlers: */
437438
#ifdef CONFIG_64BIT
438439
.Lcopy16_fault:
439-
10: b .Lcopy_done
440-
std,ma t1,8(dstspc,dst)
440+
b .Lcopy_done
441+
10: std,ma t1,8(dstspc,dst)
441442
ASM_EXCEPTIONTABLE_ENTRY(10b,.Lcopy_done)
442443
#endif
443444

444445
.Lcopy8_fault:
445-
10: b .Lcopy_done
446-
stw,ma t1,4(dstspc,dst)
446+
b .Lcopy_done
447+
10: stw,ma t1,4(dstspc,dst)
447448
ASM_EXCEPTIONTABLE_ENTRY(10b,.Lcopy_done)
448449

449450
.exit

0 commit comments

Comments
 (0)