IONVMeFamily.kext changes in Sierra DP2 (build 16A239j)

I have installed the Sierra DP2 update (build 16A239j) and the IONVMeFamily.kext bin patch data is unchanged, still working, but there are a couple of other (minor) changes that you may have missed – Apple now calls _bzero for some buffers (five times).

IONVMeBlockStorageDevice::doUnmap(IOBlockStorageDeviceExtent*, unsigned int, unsigned int)

0000000000006306	movq	%r15, %rdi
0000000000006309	callq	*0x2e0(%rax)
000000000000630f	movl	$0x1000, %esi
0000000000006314	movq	%rax, %rdi
0000000000006317	callq	_bzero
000000000000631c	movq	(%r15), %rax

IONVMeController::PolledIdentifyController(bool, unsigned int)

000000000000c185	movq	%r14, %rdi
000000000000c188	callq	*0x2e0(%rax)
000000000000c18e	movl	$0x1000, %esi
000000000000c193	movq	%rax, %rdi
000000000000c196	callq	_bzero
000000000000c19b	movq	(%r14), %rax


000000000000c6e6	testq	%rbx, %rbx
000000000000c6e9	je	0xc784
000000000000c6ef	movq	(%rbx), %rax
000000000000c6f2	movq	%rbx, %rdi
000000000000c6f5	callq	*0x2e0(%rax)
000000000000c6fb	movl	$0x1000, %esi
000000000000c700	movq	%rax, %rdi
000000000000c703	callq	_bzero
000000000000c708	movq	(%rbx), %rax


000000000000d8c2	movq	%rbx, %rdi
000000000000d8c5	callq	*0x2e0(%rax)
000000000000d8cb	movl	$0x1000, %esi
000000000000d8d0	movq	%rax, %rdi
000000000000d8d3	callq	_bzero
000000000000d8d8	movq	(%rbx), %rax

IONVMeController::SetSystemRequirements(unsigned char)

000000000000e891	movq	(%rbx), %rax
000000000000e894	movq	%rbx, %rdi
000000000000e897	callq	*0x9f0(%rax)
000000000000e89d	testl	%eax, %eax
000000000000e89f	je	0xe8bc
000000000000e8a1	movq	(%rbx), %r8
000000000000e8a4	movl	%eax, %edx
000000000000e8a6	leaq	0xe451(%rip), %rsi ## literal pool for: "IOMinimumSaturationByteCount"
000000000000e8ad	movl	$0x20, %ecx
000000000000e8b2	movq	%rbx, %rdi
000000000000e8b5	callq	*0x280(%r8)


000000000000f264	pushq	%rbp
000000000000f265	movq	%rsp, %rbp
000000000000f268	pushq	%rbx
000000000000f269	pushq	%rax
000000000000f26a	xorl	%ebx, %ebx
000000000000f26c	testb	$0x10, 0x100(%rdi) ## check for built-in device
000000000000f273	je	0xf2c5
000000000000f275	movq	0xc0(%rdi), %rdi ## check device state
000000000000f27c	testq	%rdi, %rdi
000000000000f27f	je	0xf2c5
000000000000f281	movq	(%rdi), %rax
000000000000f284	leaq	0xdc12(%rip), %rsi ## literal pool for: "IOPCIExpressLinkStatus"
000000000000f28b	callq	*0x2b8(%rax)
000000000000f291	movq	0xfdd8(%rip), %rcx
000000000000f298	movq	(%rcx), %rsi
000000000000f29b	movq	%rax, %rdi
000000000000f29e	callq	0xf2a3
000000000000f2a3	testq	%rax, %rax
000000000000f2a6	je	0xf2c5
000000000000f2a8	movq	(%rax), %rcx
000000000000f2ab	movq	%rax, %rdi
000000000000f2ae	callq	*0x148(%rcx)
000000000000f2b4	andl	$0x3ff, %eax
000000000000f2b9	cmpl	$0x43, %eax
000000000000f2bc	sete	%al
000000000000f2bf	movzbl	%al, %ebx
000000000000f2c2	shll	$0x17, %ebx
000000000000f2c5	movl	%ebx, %eax
000000000000f2c7	addq	$0x8, %rsp
000000000000f2cb	popq	%rbx
000000000000f2cc	popq	%rbp
000000000000f2cd	retq

AppleNVMeSMARTUserClient::ProductionTunnel(OSObject*, void*, IOExternalMethodArguments*)

0000000000018041	movq	%rbx, %rdi
0000000000018044	callq	*0x2e0(%rax)
000000000001804a	movl	$0x1000, %esi
000000000001804f	movq	%rax, %rdi
0000000000018052	callq	0x18057
0000000000018057	movq	_bzero

There are of course a lot more changes, but they are all address related so they are unimportant to us. More importantly is the fact that we have a new property called IOMinimumSaturationByteCount. Look here.


The exact meaning of it, for us, has yet to be determined.

Edit: Text moved and screenshot added.

2 thoughts on “IONVMeFamily.kext changes in Sierra DP2 (build 16A239j)

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s