Messages in this thread | | | Date | Thu, 11 May 2023 15:32:33 +0200 | Subject | Re: [PATCH] scsi: Let scsi_execute_cmd() mark args->sshdr as invalid | From | Juergen Gross <> |
| |
On 11.05.23 15:23, Martin Wilck wrote: > On Thu, 2023-05-11 at 15:17 +0200, Juergen Gross wrote: >>> >>> We know for certain that sizeof(*sshdr) is 8 bytes, and will most >>> probably remain so. Thus >>> >>> memset(sshdr, 0, sizeof(*sshdr)) >>> >>> would result in more efficient code. >> >> I fail to see why zeroing a single byte would be less efficient than >> zeroing >> a possibly unaligned 8-byte area. > > I don't think it can be unaligned. gcc seems to think the same. It > compiles the memset(sshdr, ...) in scsi_normalize_sense() into a single > instruction on x86_64. > > 0xffffffff8177e9d0 <scsi_normalize_sense>: nopl 0x0(%rax,%rax,1) [FTRACE NOP] > 0xffffffff8177e9d5 <scsi_normalize_sense+5>: test %rdi,%rdi > 0xffffffff8177e9d8 <scsi_normalize_sense+8>: movq $0x0,(%rdx)
A struct with 8 "u8" fields can be unaligned.
x86_64 can do unaligned 8-byte stores.
Other architectures can't (e.g. MIPS). And 32-bit architectures might need 2 stores.
Juergen [unhandled content-type:application/pgp-keys][unhandled content-type:application/pgp-signature] | |