diff options
author | Blue Swirl <blauwirbel@gmail.com> | 2011-08-07 19:55:23 +0000 |
---|---|---|
committer | Blue Swirl <blauwirbel@gmail.com> | 2011-08-21 20:01:59 +0000 |
commit | d7b9553489f896bbcdb47403edb92f0bfb02eeaa (patch) | |
tree | 0004f3b6fff55aeab3df31697c02486ae619e5ee | |
parent | 242cca4fdfadafca39fa918e78fea6ef89d6decc (diff) |
escc: avoid structure holes spotted by pahole
Edited report from pahole on amd64 host:
struct ChannelState {
...
ChnType type; /* 32 4 */
/* XXX 4 bytes hole, try to pack */
...
uint8_t rregs[16]; /* 66 16 */
/* XXX 2 bytes hole, try to pack */
...
/* size: 392, cachelines: 7 */
/* sum members: 382, holes: 2, sum holes: 6 */
/* padding: 4 */
/* last cacheline: 8 bytes */
}; /* definitions: 1 */
Fix by rearranging the structure to avoid padding.
Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
-rw-r--r-- | hw/escc.c | 9 |
1 files changed, 5 insertions, 4 deletions
@@ -108,18 +108,19 @@ typedef struct { #define SERIAL_REGS 16 typedef struct ChannelState { qemu_irq irq; - uint32_t reg; uint32_t rxint, txint, rxint_under_svc, txint_under_svc; - ChnID chn; // this channel, A (base+4) or B (base+0) - ChnType type; struct ChannelState *otherchn; - uint8_t rx, tx, wregs[SERIAL_REGS], rregs[SERIAL_REGS]; + uint32_t reg; + uint8_t wregs[SERIAL_REGS], rregs[SERIAL_REGS]; SERIOQueue queue; CharDriverState *chr; int e0_mode, led_mode, caps_lock_mode, num_lock_mode; int disabled; int clock; uint32_t vmstate_dummy; + ChnID chn; // this channel, A (base+4) or B (base+0) + ChnType type; + uint8_t rx, tx; } ChannelState; struct SerialState { |