From 40ee7474a319b8ad54155fd2cb6385df8e6f05bb Mon Sep 17 00:00:00 2001 From: Stefan Agner Date: Mon, 22 May 2017 11:33:12 -0700 Subject: fix strict alias warning Use explicit pointer to struct rpmsg_hdr_reserved to avoid warnings: rpmsg_ext.c:160:18: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] ((struct rpmsg_hdr_reserved*)&hdr->reserved)->idx = idx; Signed-off-by: Stefan Agner --- middleware/multicore/open-amp/rpmsg/rpmsg_core.c | 6 ++++-- middleware/multicore/open-amp/rpmsg/rpmsg_ext.c | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/middleware/multicore/open-amp/rpmsg/rpmsg_core.c b/middleware/multicore/open-amp/rpmsg/rpmsg_core.c index 1553280..0fc7c4d 100644 --- a/middleware/multicore/open-amp/rpmsg/rpmsg_core.c +++ b/middleware/multicore/open-amp/rpmsg/rpmsg_core.c @@ -523,6 +523,7 @@ void rpmsg_rx_callback(struct virtqueue *vq) { struct rpmsg_channel *rp_chnl; struct rpmsg_endpoint *rp_ept; struct rpmsg_hdr *rp_hdr; + struct rpmsg_hdr_reserved *reserved; struct llist *node; unsigned long len; unsigned short idx; @@ -596,8 +597,9 @@ void rpmsg_rx_callback(struct virtqueue *vq) { { /* 'rp_hdr->reserved' field is now used as storage for * 'idx' and 'len' to release buffer later */ - ((struct rpmsg_hdr_reserved*)&rp_hdr->reserved)->idx = idx; - ((struct rpmsg_hdr_reserved*)&rp_hdr->reserved)->totlen = len; + reserved = (struct rpmsg_hdr_reserved*)&rp_hdr->reserved; + reserved->idx = (uint16_t)idx; + reserved->totlen = (uint16_t)len; } else { diff --git a/middleware/multicore/open-amp/rpmsg/rpmsg_ext.c b/middleware/multicore/open-amp/rpmsg/rpmsg_ext.c index dd6fefb..0fe8360 100644 --- a/middleware/multicore/open-amp/rpmsg/rpmsg_ext.c +++ b/middleware/multicore/open-amp/rpmsg/rpmsg_ext.c @@ -122,6 +122,7 @@ void rpmsg_release_rx_buffer(struct rpmsg_channel *rpdev, void *rxbuf) { */ void *rpmsg_alloc_tx_buffer(struct rpmsg_channel *rpdev, unsigned long *size, int wait) { struct rpmsg_hdr *hdr; + struct rpmsg_hdr_reserved *reserved; struct remote_device *rdev; unsigned short idx; int buff_len, tick_count = 0; @@ -157,8 +158,9 @@ void *rpmsg_alloc_tx_buffer(struct rpmsg_channel *rpdev, unsigned long *size, in } /* Store buffer size and the index into the reserved field to be used when sending */ - ((struct rpmsg_hdr_reserved*)&hdr->reserved)->idx = idx; - ((struct rpmsg_hdr_reserved*)&hdr->reserved)->totlen = buff_len; + reserved = (struct rpmsg_hdr_reserved*)&hdr->reserved; + reserved->idx = idx; + reserved->totlen = buff_len; /* Actual data buffer size is vring buffer size minus rpmsg header length */ *size = buff_len - offsetof(struct rpmsg_hdr, data); -- cgit v1.2.3