Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

um: remove csum_partial_copy_generic_i386 to clean up exception table

arch/x86/um/checksum_32.S had been copy & paste from x86. When build
x86 uml, csum_partial_copy_generic_i386 mess up the exception table.
In fact, exception table dose not work in uml kernel.

And csum_partial_copy_generic_i386 never been called. So, delete it.

Signed-off-by: Honggang Li <enjoymindful@gmail.com>
Signed-off-by: Richard Weinberger <richard@nod.at>

authored by

Honggang Li and committed by
Richard Weinberger
67131230 c798360c

-239
-239
arch/x86/um/checksum_32.S
··· 214 214 ret 215 215 216 216 #endif 217 - 218 - /* 219 - unsigned int csum_partial_copy_generic (const char *src, char *dst, 220 - int len, int sum, int *src_err_ptr, int *dst_err_ptr) 221 - */ 222 - 223 - /* 224 - * Copy from ds while checksumming, otherwise like csum_partial 225 - * 226 - * The macros SRC and DST specify the type of access for the instruction. 227 - * thus we can call a custom exception handler for all access types. 228 - * 229 - * FIXME: could someone double-check whether I haven't mixed up some SRC and 230 - * DST definitions? It's damn hard to trigger all cases. I hope I got 231 - * them all but there's no guarantee. 232 - */ 233 - 234 - #define SRC(y...) \ 235 - 9999: y; \ 236 - _ASM_EXTABLE(9999b, 6001f) 237 - 238 - #define DST(y...) \ 239 - 9999: y; \ 240 - _ASM_EXTABLE(9999b, 6002f) 241 - 242 - .align 4 243 - 244 - #ifndef CONFIG_X86_USE_PPRO_CHECKSUM 245 - 246 - #define ARGBASE 16 247 - #define FP 12 248 - 249 - csum_partial_copy_generic_i386: 250 - subl $4,%esp 251 - pushl %edi 252 - pushl %esi 253 - pushl %ebx 254 - movl ARGBASE+16(%esp),%eax # sum 255 - movl ARGBASE+12(%esp),%ecx # len 256 - movl ARGBASE+4(%esp),%esi # src 257 - movl ARGBASE+8(%esp),%edi # dst 258 - 259 - testl $2, %edi # Check alignment. 260 - jz 2f # Jump if alignment is ok. 261 - subl $2, %ecx # Alignment uses up two bytes. 262 - jae 1f # Jump if we had at least two bytes. 263 - addl $2, %ecx # ecx was < 2. Deal with it. 264 - jmp 4f 265 - SRC(1: movw (%esi), %bx ) 266 - addl $2, %esi 267 - DST( movw %bx, (%edi) ) 268 - addl $2, %edi 269 - addw %bx, %ax 270 - adcl $0, %eax 271 - 2: 272 - movl %ecx, FP(%esp) 273 - shrl $5, %ecx 274 - jz 2f 275 - testl %esi, %esi 276 - SRC(1: movl (%esi), %ebx ) 277 - SRC( movl 4(%esi), %edx ) 278 - adcl %ebx, %eax 279 - DST( movl %ebx, (%edi) ) 280 - adcl %edx, %eax 281 - DST( movl %edx, 4(%edi) ) 282 - 283 - SRC( movl 8(%esi), %ebx ) 284 - SRC( movl 12(%esi), %edx ) 285 - adcl %ebx, %eax 286 - DST( movl %ebx, 8(%edi) ) 287 - adcl %edx, %eax 288 - DST( movl %edx, 12(%edi) ) 289 - 290 - SRC( movl 16(%esi), %ebx ) 291 - SRC( movl 20(%esi), %edx ) 292 - adcl %ebx, %eax 293 - DST( movl %ebx, 16(%edi) ) 294 - adcl %edx, %eax 295 - DST( movl %edx, 20(%edi) ) 296 - 297 - SRC( movl 24(%esi), %ebx ) 298 - SRC( movl 28(%esi), %edx ) 299 - adcl %ebx, %eax 300 - DST( movl %ebx, 24(%edi) ) 301 - adcl %edx, %eax 302 - DST( movl %edx, 28(%edi) ) 303 - 304 - lea 32(%esi), %esi 305 - lea 32(%edi), %edi 306 - dec %ecx 307 - jne 1b 308 - adcl $0, %eax 309 - 2: movl FP(%esp), %edx 310 - movl %edx, %ecx 311 - andl $0x1c, %edx 312 - je 4f 313 - shrl $2, %edx # This clears CF 314 - SRC(3: movl (%esi), %ebx ) 315 - adcl %ebx, %eax 316 - DST( movl %ebx, (%edi) ) 317 - lea 4(%esi), %esi 318 - lea 4(%edi), %edi 319 - dec %edx 320 - jne 3b 321 - adcl $0, %eax 322 - 4: andl $3, %ecx 323 - jz 7f 324 - cmpl $2, %ecx 325 - jb 5f 326 - SRC( movw (%esi), %cx ) 327 - leal 2(%esi), %esi 328 - DST( movw %cx, (%edi) ) 329 - leal 2(%edi), %edi 330 - je 6f 331 - shll $16,%ecx 332 - SRC(5: movb (%esi), %cl ) 333 - DST( movb %cl, (%edi) ) 334 - 6: addl %ecx, %eax 335 - adcl $0, %eax 336 - 7: 337 - 5000: 338 - 339 - # Exception handler: 340 - .section .fixup, "ax" 341 - 342 - 6001: 343 - movl ARGBASE+20(%esp), %ebx # src_err_ptr 344 - movl $-EFAULT, (%ebx) 345 - 346 - # zero the complete destination - computing the rest 347 - # is too much work 348 - movl ARGBASE+8(%esp), %edi # dst 349 - movl ARGBASE+12(%esp), %ecx # len 350 - xorl %eax,%eax 351 - rep ; stosb 352 - 353 - jmp 5000b 354 - 355 - 6002: 356 - movl ARGBASE+24(%esp), %ebx # dst_err_ptr 357 - movl $-EFAULT,(%ebx) 358 - jmp 5000b 359 - 360 - .previous 361 - 362 - popl %ebx 363 - popl %esi 364 - popl %edi 365 - popl %ecx # equivalent to addl $4,%esp 366 - ret 367 - 368 - #else 369 - 370 - /* Version for PentiumII/PPro */ 371 - 372 - #define ROUND1(x) \ 373 - SRC(movl x(%esi), %ebx ) ; \ 374 - addl %ebx, %eax ; \ 375 - DST(movl %ebx, x(%edi) ) ; 376 - 377 - #define ROUND(x) \ 378 - SRC(movl x(%esi), %ebx ) ; \ 379 - adcl %ebx, %eax ; \ 380 - DST(movl %ebx, x(%edi) ) ; 381 - 382 - #define ARGBASE 12 383 - 384 - csum_partial_copy_generic_i386: 385 - pushl %ebx 386 - pushl %edi 387 - pushl %esi 388 - movl ARGBASE+4(%esp),%esi #src 389 - movl ARGBASE+8(%esp),%edi #dst 390 - movl ARGBASE+12(%esp),%ecx #len 391 - movl ARGBASE+16(%esp),%eax #sum 392 - # movl %ecx, %edx 393 - movl %ecx, %ebx 394 - movl %esi, %edx 395 - shrl $6, %ecx 396 - andl $0x3c, %ebx 397 - negl %ebx 398 - subl %ebx, %esi 399 - subl %ebx, %edi 400 - lea -1(%esi),%edx 401 - andl $-32,%edx 402 - lea 3f(%ebx,%ebx), %ebx 403 - testl %esi, %esi 404 - jmp *%ebx 405 - 1: addl $64,%esi 406 - addl $64,%edi 407 - SRC(movb -32(%edx),%bl) ; SRC(movb (%edx),%bl) 408 - ROUND1(-64) ROUND(-60) ROUND(-56) ROUND(-52) 409 - ROUND (-48) ROUND(-44) ROUND(-40) ROUND(-36) 410 - ROUND (-32) ROUND(-28) ROUND(-24) ROUND(-20) 411 - ROUND (-16) ROUND(-12) ROUND(-8) ROUND(-4) 412 - 3: adcl $0,%eax 413 - addl $64, %edx 414 - dec %ecx 415 - jge 1b 416 - 4: movl ARGBASE+12(%esp),%edx #len 417 - andl $3, %edx 418 - jz 7f 419 - cmpl $2, %edx 420 - jb 5f 421 - SRC( movw (%esi), %dx ) 422 - leal 2(%esi), %esi 423 - DST( movw %dx, (%edi) ) 424 - leal 2(%edi), %edi 425 - je 6f 426 - shll $16,%edx 427 - 5: 428 - SRC( movb (%esi), %dl ) 429 - DST( movb %dl, (%edi) ) 430 - 6: addl %edx, %eax 431 - adcl $0, %eax 432 - 7: 433 - .section .fixup, "ax" 434 - 6001: movl ARGBASE+20(%esp), %ebx # src_err_ptr 435 - movl $-EFAULT, (%ebx) 436 - # zero the complete destination (computing the rest is too much work) 437 - movl ARGBASE+8(%esp),%edi # dst 438 - movl ARGBASE+12(%esp),%ecx # len 439 - xorl %eax,%eax 440 - rep; stosb 441 - jmp 7b 442 - 6002: movl ARGBASE+24(%esp), %ebx # dst_err_ptr 443 - movl $-EFAULT, (%ebx) 444 - jmp 7b 445 - .previous 446 - 447 - popl %esi 448 - popl %edi 449 - popl %ebx 450 - ret 451 - 452 - #undef ROUND 453 - #undef ROUND1 454 - 455 - #endif