Thread (12 messages) 12 messages, 3 authors, 2022-05-06

RE: [PATCH net-next] tls: Add opt-in zerocopy mode of sendfile()

From: David Laight <hidden>
Date: 2022-05-05 13:48:34

From: Maxim Mikityanskiy
Sent: 05 May 2022 13:40

On 2022-05-04 12:49, David Laight wrote:
quoted
quoted
quoted
If you declare the union on the stack in the callers, and pass by value
- is the compiler not going to be clever enough to still DDRT?
Ah, OK, it should do the thing. I thought you wanted me to ditch the
union altogether.
Some architectures always pass struct/union by address.
Which is probably not what you had in mind.
Do you have any specific architecture in mind? I couldn't find any
information that it happens anywhere, x86_64 ABI [1] (pages 20-21)
aligns with my expectations, and my common sense can't explain why would
some architectures do what you say.

In C, when the caller passes a struct as a parameter, the callee can
freely modify it. If the compiler silently replaced it with a pointer,
the callee would corrupt the caller's local variable, so such approach
requires the caller to make an extra copy.
Yes, that is what happens.
Making an extra copy on the
stack and passing a pointer doesn't make any sense to me if you can just
make a copy on the stack (or to a register) and call it a parameter.

If you know any specific architecture supported by Linux that passes all
unions by a pointer, could you please point me to it? Maybe I'm missing
something in my logic, and a real-world example will explain things, but
at the moment it sounds unrealistic to me.
Look at any old architecture, m68k almost certainly passes all structures
by address.
i386 would - but I think the 'regparm' option includes passing small
structures by value.
I think sparc32 used to, but that might have changed in the last 30 years.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help