aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBlue Swirl <blauwirbel@gmail.com>2011-08-07 19:55:23 +0000
committerBlue Swirl <blauwirbel@gmail.com>2011-08-21 20:01:59 +0000
commitd7b9553489f896bbcdb47403edb92f0bfb02eeaa (patch)
tree0004f3b6fff55aeab3df31697c02486ae619e5ee
parent242cca4fdfadafca39fa918e78fea6ef89d6decc (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.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/hw/escc.c b/hw/escc.c
index bea5873a02..ffcd746e00 100644
--- a/hw/escc.c
+++ b/hw/escc.c
@@ -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 {