Thread (6 messages) 6 messages, 2 authors, 2023-08-16

Re: [RFC PATCH v2] iov_iter: Convert iterate*() to inline funcs

From: David Howells <dhowells@redhat.com>
Date: 2023-08-16 11:20:48
Also in: linux-fsdevel, linux-mm, lkml

David Laight [off-list ref] wrote:
quoted
That can't be avoided if I convert everything to inline functions and
function pointers - but the optimiser can get rid of it where it can
inline the step function.
AFAICT the IOVEC one was only called directly.
I've made some changes that I'll post shortly, and I now get this:

	...
	<+36>:	cmpb   $0x0,0x1(%rdx)	# iter->copy_mc
	...
	<+46>:	je     0xffffffff81779aae <_copy_from_iter+98>
	<+48>:	jmp    0xffffffff81779a87 <_copy_from_iter+59>
	...
	# Handle ->copy_mc == true
	<+59>:	mov    0x38(%rsp),%rax
	<+64>:	sub    %gs:0x28,%rax
	<+73>:	jne    0xffffffff81779db1 <_copy_from_iter+869>
	<+79>:	add    $0x40,%rsp
	<+83>:	pop    %rbx
	<+84>:	pop    %rbp
	<+85>:	pop    %r12
	<+87>:	pop    %r13
	<+89>:	pop    %r14
	<+91>:	pop    %r15
	<+93>:	jmp    0xffffffff81777934 <__copy_from_iter_mc>
	...
	# ITER_UBUF
	<+121>:	mov    (%rdx),%al
	<+123>:	cmp    $0x5,%al
	<+125>:	jne    0xffffffff81779b01 <_copy_from_iter+181>
	...
	<+147>:	call   0xffffffff817777ee <__access_ok>
	<+152>:	test   %al,%al
	<+154>:	je     0xffffffff81779af9 <_copy_from_iter+173>
	<+156>:	nop
	<+157>:	nop
	<+158>:	nop
	<+159>:	mov    %r12,%rdi
	<+162>:	mov    %rdx,%rsi
	<+165>:	rep movsb %ds:(%rsi),%es:(%rdi)
	...
	# ITER_IOVEC
	<+181>:	test   %al,%al
	<+183>:	jne    0xffffffff81779b8d <_copy_from_iter+321>
	...
	<+234>:	call   0xffffffff817777ee <__access_ok>
	<+239>:	test   %al,%al
	<+241>:	je     0xffffffff81779b54 <_copy_from_iter+264>
	<+243>:	nop
	<+244>:	nop
	<+245>:	nop
	<+246>:	lea    (%r12,%r15,1),%rax
	<+250>:	mov    %r8,%rsi
	<+253>:	mov    %rax,%rdi
	<+256>:	rep movsb %ds:(%rsi),%es:(%rdi)
	...
	# ITER_BVEC
	<+321>:	cmp    $0x2,%al
	<+323>:	jne    0xffffffff81779c1f <_copy_from_iter+467>
	...
	<+375>:	call   0xffffffff81777282 <kmap_local_page>
	...
	<+431>:	rep movsb %ds:(%rsi),%es:(%rdi)
	...
	# ITER_KVEC
	<+467>:	cmp    $0x1,%al
	<+469>:	jne    0xffffffff81779c82 <_copy_from_iter+566>
	...
	<+526>:	rep movsb %ds:(%rsi),%es:(%rdi)
	...
	# ITER_XARRAY
	<+566>:	cmp    $0x3,%al
	<+568>:	jne    0xffffffff81779d9d <_copy_from_iter+849>
	...
	<+639>:	call   0xffffffff81126bcf <__rcu_read_lock>
	...
	<+651>:	call   0xffffffff81d5ed97 <xas_find>
	...
	<+764>:	call   0xffffffff817772a7 <kmap_local_folio>
	...
	<+806>:	rep movsb %ds:(%rsi),%es:(%rdi)
	...
	# ITER_DISCARD/default
	<+849>:	sub    %rbx,0x18(%rbp)
	<+853>:	mov    0x38(%rsp),%rax
	<+858>:	sub    %gs:0x28,%rax
	<+867>:	je     0xffffffff81779db6 <_copy_from_iter+874>
	<+869>:	call   0xffffffff81d6578c <__stack_chk_fail>
	<+874>:	add    $0x40,%rsp
	<+878>:	mov    %rbx,%rax
	<+881>:	pop    %rbx
	<+882>:	pop    %rbp
	<+883>:	pop    %r12
	<+885>:	pop    %r13
	<+887>:	pop    %r14
	<+889>:	pop    %r15
	<+891>:	jmp    0xffffffff81d72920 <__x86_return_thunk>

David
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help