Now that SDT is implemented using hot-patching, SDT_PROBE* no longer
introduces a branch instruction, so the SDT_PROBES_ENABLED() check in
each VOP_*_APV() is not really worth preserving.
Details
Details
Disassembly of VOP_READ_APV before the change:
Dump of assembler code for function VOP_READ_APV: 0xffffffff81134ba0 <+0>: push %rbp 0xffffffff81134ba1 <+1>: mov %rsp,%rbp 0xffffffff81134ba4 <+4>: push %r14 0xffffffff81134ba6 <+6>: push %rbx 0xffffffff81134ba7 <+7>: mov %rsi,%rbx 0xffffffff81134baa <+10>: mov %rdi,%r14 0xffffffff81134bad <+13>: cmpb $0x0,0x6cb4fa(%rip) # 0xffffffff818000ae <sdt_probes_enabled> 0xffffffff81134bb4 <+20>: jne 0xffffffff81134bd3 <VOP_READ_APV+51> 0xffffffff81134bb6 <+22>: mov %rbx,%rdi 0xffffffff81134bb9 <+25>: call *0x90(%r14) 0xffffffff81134bc0 <+32>: mov %rbx,%rdi 0xffffffff81134bc3 <+35>: mov %eax,%esi 0xffffffff81134bc5 <+37>: mov %eax,%ebx 0xffffffff81134bc7 <+39>: call 0xffffffff80c5d460 <vop_read_post> 0xffffffff81134bcc <+44>: mov %ebx,%eax 0xffffffff81134bce <+46>: pop %rbx 0xffffffff81134bcf <+47>: pop %r14 0xffffffff81134bd1 <+49>: pop %rbp 0xffffffff81134bd2 <+50>: ret 0xffffffff81134bd3 <+51>: nopw (%rax,%rax,1) 0xffffffff81134bd8 <+56>: mov %rbx,%rdi 0xffffffff81134bdb <+59>: call *0x90(%r14) 0xffffffff81134be2 <+66>: nopw (%rax,%rax,1) 0xffffffff81134be7 <+71>: jmp 0xffffffff81134bc0 <VOP_READ_APV+32> 0xffffffff81134be9 <+73>: mov 0x82e059(%rip),%edi # 0xffffffff81962c48 <sdt_vfs_vop_vop_read_return+88> 0xffffffff81134bef <+79>: mov 0x8(%rbx),%rsi 0xffffffff81134bf3 <+83>: movslq %eax,%rcx 0xffffffff81134bf6 <+86>: mov %rbx,%rdx 0xffffffff81134bf9 <+89>: xor %r8d,%r8d 0xffffffff81134bfc <+92>: xor %r9d,%r9d 0xffffffff81134bff <+95>: mov %eax,%r14d 0xffffffff81134c02 <+98>: call 0xffffffff80b63e60 <sdt_probe> 0xffffffff81134c07 <+103>: mov %r14d,%eax 0xffffffff81134c0a <+106>: jmp 0xffffffff81134bc0 <VOP_READ_APV+32> 0xffffffff81134c0c <+108>: mov 0x82df5e(%rip),%edi # 0xffffffff81962b70 <sdt_vfs_vop_vop_read_entry+88> 0xffffffff81134c12 <+114>: mov 0x8(%rbx),%rsi 0xffffffff81134c16 <+118>: mov %rbx,%rdx 0xffffffff81134c19 <+121>: xor %ecx,%ecx 0xffffffff81134c1b <+123>: xor %r8d,%r8d 0xffffffff81134c1e <+126>: xor %r9d,%r9d 0xffffffff81134c21 <+129>: call 0xffffffff80b63e60 <sdt_probe> 0xffffffff81134c26 <+134>: jmp 0xffffffff81134bd8 <VOP_READ_APV+56>
after:
Dump of assembler code for function VOP_READ_APV: 0xffffffff81136a70 <+0>: push %rbp 0xffffffff81136a71 <+1>: mov %rsp,%rbp 0xffffffff81136a74 <+4>: push %r14 0xffffffff81136a76 <+6>: push %rbx 0xffffffff81136a77 <+7>: mov %rsi,%rbx 0xffffffff81136a7a <+10>: mov %rdi,%r14 0xffffffff81136a7d <+13>: nopw (%rax,%rax,1) 0xffffffff81136a82 <+18>: mov %rbx,%rdi 0xffffffff81136a85 <+21>: call *0x90(%r14) 0xffffffff81136a8c <+28>: nopw (%rax,%rax,1) 0xffffffff81136a91 <+33>: mov %rbx,%rdi 0xffffffff81136a94 <+36>: mov %eax,%esi 0xffffffff81136a96 <+38>: mov %eax,%ebx 0xffffffff81136a98 <+40>: call 0xffffffff80c5f8f0 <vop_read_post> 0xffffffff81136a9d <+45>: mov %ebx,%eax 0xffffffff81136a9f <+47>: pop %rbx 0xffffffff81136aa0 <+48>: pop %r14 0xffffffff81136aa2 <+50>: pop %rbp 0xffffffff81136aa3 <+51>: ret 0xffffffff81136aa4 <+52>: mov 0x82d0c6(%rip),%edi # 0xffffffff81963b70 <sdt_vfs_vop_vop_read_entry+88> 0xffffffff81136aaa <+58>: mov 0x8(%rbx),%rsi 0xffffffff81136aae <+62>: mov %rbx,%rdx 0xffffffff81136ab1 <+65>: xor %ecx,%ecx 0xffffffff81136ab3 <+67>: xor %r8d,%r8d 0xffffffff81136ab6 <+70>: xor %r9d,%r9d 0xffffffff81136ab9 <+73>: call 0xffffffff80b64050 <sdt_probe> 0xffffffff81136abe <+78>: jmp 0xffffffff81136a82 <VOP_READ_APV+18> 0xffffffff81136ac0 <+80>: mov 0x82d182(%rip),%edi # 0xffffffff81963c48 <sdt_vfs_vop_vop_read_return+88> 0xffffffff81136ac6 <+86>: mov 0x8(%rbx),%rsi 0xffffffff81136aca <+90>: movslq %eax,%rcx 0xffffffff81136acd <+93>: mov %rbx,%rdx 0xffffffff81136ad0 <+96>: xor %r8d,%r8d 0xffffffff81136ad3 <+99>: xor %r9d,%r9d 0xffffffff81136ad6 <+102>: mov %eax,%r14d 0xffffffff81136ad9 <+105>: call 0xffffffff80b64050 <sdt_probe> 0xffffffff81136ade <+110>: mov %r14d,%eax 0xffffffff81136ae1 <+113>: jmp 0xffffffff81136a91 <VOP_READ_APV+33>
So when probes are disabled, the code is very slightly less dense, but we manage to remove a branch.
Diff Detail
Diff Detail
- Repository
- rG FreeBSD src repository
- Lint
Lint Not Applicable - Unit
Tests Not Applicable