Re: [PATCH v2] pvcalls-front: 64-bit align flags

2018-02-28 Thread Juergen Gross
On 01/03/18 03:05, Stefano Stabellini wrote:
> We are using test_and_* operations on the status and flag fields of
> struct sock_mapping. However, these functions require the operand to be
> 64-bit aligned on arm64. Currently, only status is 64-bit aligned.
> 
> Make status and flags explicitly 64-bit aligned.
> 
> Signed-off-by: Stefano Stabellini 

Committed to xen/tip for-linus-4.16a


Juergen



Re: [PATCH v2] pvcalls-front: 64-bit align flags

2018-02-28 Thread Boris Ostrovsky



On 02/28/2018 09:05 PM, Stefano Stabellini wrote:

We are using test_and_* operations on the status and flag fields of
struct sock_mapping. However, these functions require the operand to be
64-bit aligned on arm64. Currently, only status is 64-bit aligned.

Make status and flags explicitly 64-bit aligned.

Signed-off-by: Stefano Stabellini 



Reviewed-by: Boris Ostrovsky 



[PATCH v2] pvcalls-front: 64-bit align flags

2018-02-28 Thread Stefano Stabellini
We are using test_and_* operations on the status and flag fields of
struct sock_mapping. However, these functions require the operand to be
64-bit aligned on arm64. Currently, only status is 64-bit aligned.

Make status and flags explicitly 64-bit aligned.

Signed-off-by: Stefano Stabellini 

---
Changes in v2:
- use __attribute__((aligned(8)))
- add comments

diff --git a/drivers/xen/pvcalls-front.c b/drivers/xen/pvcalls-front.c
index ca5b773..582929e 100644
--- a/drivers/xen/pvcalls-front.c
+++ b/drivers/xen/pvcalls-front.c
@@ -73,20 +73,25 @@ struct sock_mapping {
wait_queue_head_t inflight_conn_req;
} active;
struct {
-   /* Socket status */
+   /*
+* Socket status, needs to be 64-bit aligned due to the
+* test_and_* functions which have this requirement on arm64.
+*/
 #define PVCALLS_STATUS_UNINITALIZED  0
 #define PVCALLS_STATUS_BIND  1
 #define PVCALLS_STATUS_LISTEN2
-   uint8_t status;
+   uint8_t status __attribute__((aligned(8)));
/*
 * Internal state-machine flags.
 * Only one accept operation can be inflight for a socket.
 * Only one poll operation can be inflight for a given socket.
+* flags needs to be 64-bit aligned due to the test_and_*
+* functions which have this requirement on arm64.
 */
 #define PVCALLS_FLAG_ACCEPT_INFLIGHT 0
 #define PVCALLS_FLAG_POLL_INFLIGHT   1
 #define PVCALLS_FLAG_POLL_RET2
-   uint8_t flags;
+   uint8_t flags __attribute__((aligned(8)));
uint32_t inflight_req_id;
struct sock_mapping *accept_map;
wait_queue_head_t inflight_accept_req;