On Tue, 2021-03-30 at 10:23 +0800, Xiaofei Tan wrote: > Hi David, > > On 2021/3/29 18:09, David Laight wrote: > > From: Xiaofei Tan > > > Sent: 27 March 2021 07:46 > > > > > > Replace __attribute__((packed)) by __packed following the > > > advice of checkpatch.pl. > > > > > > Signed-off-by: Xiaofei Tan <tanxiaofei@xxxxxxxxxx> > > > --- > > > drivers/acpi/acpi_fpdt.c | 6 +++--- > > > 1 file changed, 3 insertions(+), 3 deletions(-) > > > > > > diff --git a/drivers/acpi/acpi_fpdt.c b/drivers/acpi/acpi_fpdt.c > > > index a89a806..690a88a 100644 > > > --- a/drivers/acpi/acpi_fpdt.c > > > +++ b/drivers/acpi/acpi_fpdt.c > > > @@ -53,7 +53,7 @@ struct resume_performance_record { > > > u32 resume_count; > > > u64 resume_prev; > > > u64 resume_avg; > > > -} __attribute__((packed)); > > > +} __packed; > > > > > > struct boot_performance_record { > > > struct fpdt_record_header header; > > > @@ -63,13 +63,13 @@ struct boot_performance_record { > > > u64 bootloader_launch; > > > u64 exitbootservice_start; > > > u64 exitbootservice_end; > > > -} __attribute__((packed)); > > > +} __packed; > > > > > > struct suspend_performance_record { > > > struct fpdt_record_header header; > > > u64 suspend_start; > > > u64 suspend_end; > > > -} __attribute__((packed)); > > > +} __packed; > > > > My standard question about 'packed' is whether it is actually > > needed. > > It should only be used if the structures might be misaligned in > > memory. > > If the only problem is that a 64bit item needs to be 32bit aligned > > then a suitable type should be used for those specific fields. > > > > Those all look very dubious - the standard header isn't packed > > so everything must eb assumed to be at least 32bit aligned. > > > > There are also other sub-structures that contain 64bit values. > > These don't contain padding - but that requires 64bit alignement. > > > > The only problematic structure is the last one - which would have > > a 32bit pad after the header. > > Is this even right given than there are explicit alignment pads > > in some of the other structures. > > > > If 64bit alignment isn't guaranteed then a '64bit aligned to 32bit' > > type should be used for the u64 fields. > > > > Yes, some of them has been aligned already, then nothing changed > when > add this "packed ". Maybe the purpose of the original author is for > extension, and can tell others that this struct need be packed. > The patch is upstreamed recently but it was made long time ago. I think the original problem is that one of the address, probably the suspend_performance record, is not 64bit aligned, thus we can not read the proper content of suspend_start and suspend_end, mapped from physical memory. I will try to find a machine to reproduce the problem with all __attribute__((packed)) removed to double confirm this. thanks, rui > > David > > > > - > > Registered Address Lakeside, Bramley Road, Mount Farm, Milton > > Keynes, MK1 1PT, UK > > Registration No: 1397386 (Wales) > > > > > > . > > > >