qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH 07/11] esp: avoid structure holes spotted by pahole


From: Blue Swirl
Subject: [Qemu-devel] [PATCH 07/11] esp: avoid structure holes spotted by pahole
Date: Sun, 7 Aug 2011 21:00:02 +0000

Report from pahole on amd64 host:
struct ESPState {
        SysBusDevice               busdev;               /*     0  5648 */
        /* --- cacheline 88 boundary (5632 bytes) was 16 bytes ago --- */
        uint32_t                   it_shift;             /*  5648     4 */

        /* XXX 4 bytes hole, try to pack */

        qemu_irq                   irq;                  /*  5656     8 */
        uint8_t                    rregs[16];            /*  5664    16 */
        uint8_t                    wregs[16];            /*  5680    16 */
        /* --- cacheline 89 boundary (5696 bytes) --- */
        int32_t                    ti_size;              /*  5696     4 */
        uint32_t                   ti_rptr;              /*  5700     4 */
        uint32_t                   ti_wptr;              /*  5704     4 */
        uint8_t                    ti_buf[16];           /*  5708    16 */
        uint32_t                   status;               /*  5724     4 */
        uint32_t                   dma;                  /*  5728     4 */

        /* XXX 4 bytes hole, try to pack */

        SCSIBus                    bus;                  /*  5736  2120 */
        /* --- cacheline 122 boundary (7808 bytes) was 48 bytes ago --- */
        SCSIDevice *               current_dev;          /*  7856     8 */
        SCSIRequest *              current_req;          /*  7864     8 */
        /* --- cacheline 123 boundary (7872 bytes) --- */
        uint8_t                    cmdbuf[16];           /*  7872    16 */
        uint32_t                   cmdlen;               /*  7888     4 */
        uint32_t                   do_cmd;               /*  7892     4 */
        uint32_t                   dma_left;             /*  7896     4 */
        uint32_t                   dma_counter;          /*  7900     4 */
        uint8_t *                  async_buf;            /*  7904     8 */
        uint32_t                   async_len;            /*  7912     4 */

        /* XXX 4 bytes hole, try to pack */

        ESPDMAMemoryReadWriteFunc  dma_memory_read;      /*  7920     8 */
        ESPDMAMemoryReadWriteFunc  dma_memory_write;     /*  7928     8 */
        /* --- cacheline 124 boundary (7936 bytes) --- */
        void *                     dma_opaque;           /*  7936     8 */
        int                        dma_enabled;          /*  7944     4 */

        /* XXX 4 bytes hole, try to pack */

        void                       (*dma_cb)(ESPState *); /*  7952     8 */

        /* size: 7960, cachelines: 125 */
        /* sum members: 7944, holes: 4, sum holes: 16 */
        /* last cacheline: 24 bytes */
};      /* definitions: 1 */

Fix by rearranging the structure to avoid padding.

Signed-off-by: Blue Swirl <address@hidden>
---
 hw/esp.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/hw/esp.c b/hw/esp.c
index 9ddd637..e0ce051 100644
--- a/hw/esp.c
+++ b/hw/esp.c
@@ -54,15 +54,15 @@ typedef struct ESPState ESPState;

 struct ESPState {
     SysBusDevice busdev;
-    uint32_t it_shift;
-    qemu_irq irq;
     uint8_t rregs[ESP_REGS];
     uint8_t wregs[ESP_REGS];
+    qemu_irq irq;
+    uint32_t it_shift;
     int32_t ti_size;
     uint32_t ti_rptr, ti_wptr;
-    uint8_t ti_buf[TI_BUFSZ];
     uint32_t status;
     uint32_t dma;
+    uint8_t ti_buf[TI_BUFSZ];
     SCSIBus bus;
     SCSIDevice *current_dev;
     SCSIRequest *current_req;
@@ -75,13 +75,14 @@ struct ESPState {
     /* The size of the current DMA transfer.  Zero if no transfer is in
        progress.  */
     uint32_t dma_counter;
-    uint8_t *async_buf;
+    int dma_enabled;
+
     uint32_t async_len;
+    uint8_t *async_buf;

     ESPDMAMemoryReadWriteFunc dma_memory_read;
     ESPDMAMemoryReadWriteFunc dma_memory_write;
     void *dma_opaque;
-    int dma_enabled;
     void (*dma_cb)(ESPState *s);
 };

-- 
1.6.2.4

Attachment: 0007-esp-avoid-structure-holes-spotted-by-pahole.patch
Description: Text Data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]