summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2017-05-22 11:33:12 -0700
committerStefan Agner <stefan.agner@toradex.com>2017-05-22 17:09:55 -0700
commit40ee7474a319b8ad54155fd2cb6385df8e6f05bb (patch)
treeb952571498b3383c344ac5e83df01a482211f4c8
parenta03211ad94d1972fa255c5892665e14ca623d218 (diff)
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 <stefan.agner@toradex.com>
-rw-r--r--middleware/multicore/open-amp/rpmsg/rpmsg_core.c6
-rw-r--r--middleware/multicore/open-amp/rpmsg/rpmsg_ext.c6
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);