#include <linux/uaccess.h>
 
 
+struct opal_prd_msg {
+       union {
+               struct opal_prd_msg_header header;
+               DECLARE_FLEX_ARRAY(u8, data);
+       };
+};
+
 /*
  * The msg member must be at the end of the struct, as it's followed by the
  * message data.
  */
 struct opal_prd_msg_queue_item {
-       struct list_head                list;
-       struct opal_prd_msg_header      msg;
+       struct list_head        list;
+       struct opal_prd_msg     msg;
 };
 
 static struct device_node *prd_node;
        int rc;
 
        /* we need at least a header's worth of data */
-       if (count < sizeof(item->msg))
+       if (count < sizeof(item->msg.header))
                return -EINVAL;
 
        if (*ppos)
                        return -EINTR;
        }
 
-       size = be16_to_cpu(item->msg.size);
+       size = be16_to_cpu(item->msg.header.size);
        if (size > count) {
                err = -EINVAL;
                goto err_requeue;
        if (!item)
                return -ENOMEM;
 
-       memcpy(&item->msg, msg->params, msg_size);
+       memcpy(&item->msg.data, msg->params, msg_size);
 
        spin_lock_irqsave(&opal_prd_msg_queue_lock, flags);
        list_add_tail(&item->list, &opal_prd_msg_queue);