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

Configure Feed

Select the types of activity you want to include in your feed.

csky: Add show_tlb for CPU_CK860 debug

Print all 1024 jtlb entries and 16 iutlb entries and 16 dutlb
entries in show_regs.

Signed-off-by: Guo Ren <guoren@linux.alibaba.com>

Guo Ren 1152cb5a 3b756ccd

+121
+121
arch/csky/kernel/ptrace.c
··· 22 22 #include <asm/asm-offsets.h> 23 23 24 24 #include <abi/regdef.h> 25 + #include <abi/ckmmu.h> 25 26 26 27 #define CREATE_TRACE_POINTS 27 28 #include <trace/events/syscalls.h> ··· 344 343 trace_sys_exit(regs, syscall_get_return_value(current, regs)); 345 344 } 346 345 346 + #ifdef CONFIG_CPU_CK860 347 + static void show_iutlb(void) 348 + { 349 + int entry, i; 350 + unsigned long flags; 351 + unsigned long oldpid; 352 + unsigned long entryhi[16], entrylo0[16], entrylo1[16]; 353 + 354 + oldpid = read_mmu_entryhi(); 355 + 356 + entry = 0x8000; 357 + 358 + local_irq_save(flags); 359 + 360 + for (i = 0; i < 16; i++) { 361 + write_mmu_index(entry); 362 + tlb_read(); 363 + entryhi[i] = read_mmu_entryhi(); 364 + entrylo0[i] = read_mmu_entrylo0(); 365 + entrylo1[i] = read_mmu_entrylo1(); 366 + 367 + entry++; 368 + } 369 + 370 + local_irq_restore(flags); 371 + 372 + write_mmu_entryhi(oldpid); 373 + 374 + printk("\n\n\n"); 375 + for (i = 0; i < 16; i++) 376 + printk("iutlb[%d]: entryhi - 0x%lx; entrylo0 - 0x%lx;" 377 + " entrylo1 - 0x%lx\n", 378 + i, entryhi[i], entrylo0[i], entrylo1[i]); 379 + printk("\n\n\n"); 380 + } 381 + 382 + static void show_dutlb(void) 383 + { 384 + int entry, i; 385 + unsigned long flags; 386 + unsigned long oldpid; 387 + unsigned long entryhi[16], entrylo0[16], entrylo1[16]; 388 + 389 + oldpid = read_mmu_entryhi(); 390 + 391 + entry = 0x4000; 392 + 393 + local_irq_save(flags); 394 + 395 + for (i = 0; i < 16; i++) { 396 + write_mmu_index(entry); 397 + tlb_read(); 398 + entryhi[i] = read_mmu_entryhi(); 399 + entrylo0[i] = read_mmu_entrylo0(); 400 + entrylo1[i] = read_mmu_entrylo1(); 401 + 402 + entry++; 403 + } 404 + 405 + local_irq_restore(flags); 406 + 407 + write_mmu_entryhi(oldpid); 408 + 409 + printk("\n\n\n"); 410 + for (i = 0; i < 16; i++) 411 + printk("dutlb[%d]: entryhi - 0x%lx; entrylo0 - 0x%lx;" 412 + " entrylo1 - 0x%lx\n", 413 + i, entryhi[i], entrylo0[i], entrylo1[i]); 414 + printk("\n\n\n"); 415 + } 416 + 417 + static unsigned long entryhi[1024], entrylo0[1024], entrylo1[1024]; 418 + static void show_jtlb(void) 419 + { 420 + int entry; 421 + unsigned long flags; 422 + unsigned long oldpid; 423 + 424 + oldpid = read_mmu_entryhi(); 425 + 426 + entry = 0; 427 + 428 + local_irq_save(flags); 429 + while (entry < 1024) { 430 + write_mmu_index(entry); 431 + tlb_read(); 432 + entryhi[entry] = read_mmu_entryhi(); 433 + entrylo0[entry] = read_mmu_entrylo0(); 434 + entrylo1[entry] = read_mmu_entrylo1(); 435 + 436 + entry++; 437 + } 438 + local_irq_restore(flags); 439 + 440 + write_mmu_entryhi(oldpid); 441 + 442 + printk("\n\n\n"); 443 + 444 + for (entry = 0; entry < 1024; entry++) 445 + printk("jtlb[%x]: entryhi - 0x%lx; entrylo0 - 0x%lx;" 446 + " entrylo1 - 0x%lx\n", 447 + entry, entryhi[entry], entrylo0[entry], entrylo1[entry]); 448 + printk("\n\n\n"); 449 + } 450 + 451 + static void show_tlb(void) 452 + { 453 + show_iutlb(); 454 + show_dutlb(); 455 + show_jtlb(); 456 + } 457 + #else 458 + static void show_tlb(void) 459 + { 460 + return; 461 + } 462 + #endif 463 + 347 464 void show_regs(struct pt_regs *fp) 348 465 { 349 466 pr_info("\nCURRENT PROCESS:\n\n"); ··· 514 395 pr_info("r14: 0x%08lx r1: 0x%08lx\n", 515 396 fp->regs[8], fp->regs[9]); 516 397 #endif 398 + 399 + show_tlb(); 517 400 518 401 return; 519 402 }