8
8
#include <asm/orc_lookup.h>
9
9
10
10
#define orc_warn (fmt , ...) \
11
- printk_deferred_once(KERN_WARNING pr_fmt("WARNING: " fmt), ##__VA_ARGS__)
11
+ printk_deferred_once(KERN_WARNING "WARNING: " fmt, ##__VA_ARGS__)
12
+
13
+ #define orc_warn_current (args ...) \
14
+ ({ \
15
+ if (state->task == current) \
16
+ orc_warn(args); \
17
+ })
12
18
13
19
extern int __start_orc_unwind_ip [];
14
20
extern int __stop_orc_unwind_ip [];
@@ -446,42 +452,42 @@ bool unwind_next_frame(struct unwind_state *state)
446
452
447
453
case ORC_REG_R10 :
448
454
if (!state -> regs || !state -> full_regs ) {
449
- orc_warn ("missing regs for base reg R10 at ip %pB\n" ,
450
- (void * )state -> ip );
455
+ orc_warn_current ("missing R10 value at %pB\n" ,
456
+ (void * )state -> ip );
451
457
goto err ;
452
458
}
453
459
sp = state -> regs -> r10 ;
454
460
break ;
455
461
456
462
case ORC_REG_R13 :
457
463
if (!state -> regs || !state -> full_regs ) {
458
- orc_warn ("missing regs for base reg R13 at ip %pB\n" ,
459
- (void * )state -> ip );
464
+ orc_warn_current ("missing R13 value at %pB\n" ,
465
+ (void * )state -> ip );
460
466
goto err ;
461
467
}
462
468
sp = state -> regs -> r13 ;
463
469
break ;
464
470
465
471
case ORC_REG_DI :
466
472
if (!state -> regs || !state -> full_regs ) {
467
- orc_warn ("missing regs for base reg DI at ip %pB\n" ,
468
- (void * )state -> ip );
473
+ orc_warn_current ("missing RDI value at %pB\n" ,
474
+ (void * )state -> ip );
469
475
goto err ;
470
476
}
471
477
sp = state -> regs -> di ;
472
478
break ;
473
479
474
480
case ORC_REG_DX :
475
481
if (!state -> regs || !state -> full_regs ) {
476
- orc_warn ("missing regs for base reg DX at ip %pB\n" ,
477
- (void * )state -> ip );
482
+ orc_warn_current ("missing DX value at %pB\n" ,
483
+ (void * )state -> ip );
478
484
goto err ;
479
485
}
480
486
sp = state -> regs -> dx ;
481
487
break ;
482
488
483
489
default :
484
- orc_warn ("unknown SP base reg %d for ip %pB\n" ,
490
+ orc_warn ("unknown SP base reg %d at %pB\n" ,
485
491
orc -> sp_reg , (void * )state -> ip );
486
492
goto err ;
487
493
}
@@ -509,8 +515,8 @@ bool unwind_next_frame(struct unwind_state *state)
509
515
510
516
case ORC_TYPE_REGS :
511
517
if (!deref_stack_regs (state , sp , & state -> ip , & state -> sp )) {
512
- orc_warn ("can't dereference registers at %p for ip %pB\n" ,
513
- ( void * ) sp , (void * )orig_ip );
518
+ orc_warn_current ("can't access registers at %pB\n" ,
519
+ (void * )orig_ip );
514
520
goto err ;
515
521
}
516
522
@@ -521,8 +527,8 @@ bool unwind_next_frame(struct unwind_state *state)
521
527
522
528
case ORC_TYPE_REGS_IRET :
523
529
if (!deref_stack_iret_regs (state , sp , & state -> ip , & state -> sp )) {
524
- orc_warn ("can't dereference iret registers at %p for ip %pB\n" ,
525
- ( void * ) sp , (void * )orig_ip );
530
+ orc_warn_current ("can't access iret registers at %pB\n" ,
531
+ (void * )orig_ip );
526
532
goto err ;
527
533
}
528
534
@@ -532,7 +538,7 @@ bool unwind_next_frame(struct unwind_state *state)
532
538
break ;
533
539
534
540
default :
535
- orc_warn ("unknown .orc_unwind entry type %d for ip %pB\n" ,
541
+ orc_warn ("unknown .orc_unwind entry type %d at %pB\n" ,
536
542
orc -> type , (void * )orig_ip );
537
543
break ;
538
544
}
@@ -564,8 +570,8 @@ bool unwind_next_frame(struct unwind_state *state)
564
570
if (state -> stack_info .type == prev_type &&
565
571
on_stack (& state -> stack_info , (void * )state -> sp , sizeof (long )) &&
566
572
state -> sp <= prev_sp ) {
567
- orc_warn ("stack going in the wrong direction? ip= %pB\n" ,
568
- (void * )orig_ip );
573
+ orc_warn_current ("stack going in the wrong direction? at %pB\n" ,
574
+ (void * )orig_ip );
569
575
goto err ;
570
576
}
571
577
0 commit comments