diff options
Diffstat (limited to 'drivers/xen/xenbus/xenbus_comms.c')
| -rw-r--r-- | drivers/xen/xenbus/xenbus_comms.c | 4 | 
1 files changed, 4 insertions, 0 deletions
| diff --git a/drivers/xen/xenbus/xenbus_comms.c b/drivers/xen/xenbus/xenbus_comms.c index d239fc3c5e3d..eb5151fc8efa 100644 --- a/drivers/xen/xenbus/xenbus_comms.c +++ b/drivers/xen/xenbus/xenbus_comms.c @@ -313,6 +313,8 @@ static int process_msg(void)  			req->msg.type = state.msg.type;  			req->msg.len = state.msg.len;  			req->body = state.body; +			/* write body, then update state */ +			virt_wmb();  			req->state = xb_req_state_got_reply;  			req->cb(req);  		} else @@ -395,6 +397,8 @@ static int process_writes(void)  	if (state.req->state == xb_req_state_aborted)  		kfree(state.req);  	else { +		/* write err, then update state */ +		virt_wmb();  		state.req->state = xb_req_state_got_reply;  		wake_up(&state.req->wq);  	} |