From 1272d037aaf923531e1f6e56b95c33dc8aa28f72 Mon Sep 17 00:00:00 2001 From: Travis Geiselbrecht Date: Sat, 25 Jul 2020 20:04:21 -0700 Subject: [PATCH] [dev][virtio] remove some extraneous __PACKED attributes From working with -Wpacked its clear that some of the virtio structures are overly packed and result in bad codegen on particular architectures such as riscv. Roll back from using packed but statically assert that the sizes are correct for some future arch where things naturally pack differently. --- dev/virtio/block/virtio-block.c | 6 ++++-- dev/virtio/net/virtio-net.c | 6 ++++-- engine.mk | 2 +- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/dev/virtio/block/virtio-block.c b/dev/virtio/block/virtio-block.c index 678dd4d3..5e3b27c4 100644 --- a/dev/virtio/block/virtio-block.c +++ b/dev/virtio/block/virtio-block.c @@ -35,13 +35,15 @@ struct virtio_blk_config { uint8_t sectors; } geometry; uint32_t blk_size; -} __PACKED; +}; +STATIC_ASSERT(sizeof(struct virtio_blk_config) == 24); struct virtio_blk_req { uint32_t type; uint32_t ioprio; uint64_t sector; -} __PACKED; +}; +STATIC_ASSERT(sizeof(struct virtio_blk_req) == 16); #define VIRTIO_BLK_F_BARRIER (1<<0) #define VIRTIO_BLK_F_SIZE_MAX (1<<1) diff --git a/dev/virtio/net/virtio-net.c b/dev/virtio/net/virtio-net.c index e2b5beef..2e70af34 100644 --- a/dev/virtio/net/virtio-net.c +++ b/dev/virtio/net/virtio-net.c @@ -27,7 +27,8 @@ struct virtio_net_config { uint8_t mac[6]; uint16_t status; uint16_t max_virtqueue_pairs; -} __PACKED; +}; +STATIC_ASSERT(sizeof(struct virtio_net_config) == 10); struct virtio_net_hdr { uint8_t flags; @@ -37,7 +38,8 @@ struct virtio_net_hdr { uint16_t csum_start; uint16_t csum_offset; uint16_t num_buffers; // unused in tx -} __PACKED; +}; +STATIC_ASSERT(sizeof(struct virtio_net_hdr) == 12); #define VIRTIO_NET_F_CSUM (1<<0) #define VIRTIO_NET_F_GUEST_CSUM (1<<1) diff --git a/engine.mk b/engine.mk index fb45f4e5..27fbefff 100644 --- a/engine.mk +++ b/engine.mk @@ -56,7 +56,7 @@ CONFIGHEADER := $(BUILDDIR)/config.h GLOBAL_INCLUDES := $(BUILDDIR) $(addsuffix /include,$(LKINC)) GLOBAL_OPTFLAGS ?= $(ARCH_OPTFLAGS) GLOBAL_COMPILEFLAGS := -g -include $(CONFIGHEADER) -GLOBAL_COMPILEFLAGS += -W -Wall -Werror=return-type -Wshadow -Wdouble-promotion +GLOBAL_COMPILEFLAGS += -Wextra -Wall -Werror=return-type -Wshadow -Wdouble-promotion GLOBAL_COMPILEFLAGS += -Wno-multichar -Wno-unused-parameter -Wno-unused-function -Wno-unused-label -Wno-nonnull-compare GLOBAL_COMPILEFLAGS += -fno-common GLOBAL_CFLAGS := --std=gnu11 -Werror-implicit-function-declaration -Wstrict-prototypes -Wwrite-strings