diff mbox series

[V2] migration/rdma: clang compilation fix

Message ID 20190304184923.24215-1-marcel.apfelbaum@gmail.com
State New
Headers show
Series [V2] migration/rdma: clang compilation fix | expand

Commit Message

Marcel Apfelbaum March 4, 2019, 6:49 p.m. UTC
Configuring QEMU with:
        ../configure --cc=clang --enable-rdma

Leads to compilation error:

  CC      migration/rdma.o
  CC      migration/block.o
  qemu/migration/rdma.c:3615:58: error: taking address of packed member 'rkey' of class or structure
      'RDMARegisterResult' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]
                            (uintptr_t)host_addr, NULL, &reg_result->rkey,
                                                         ^~~~~~~~~~~~~~~~
Fix it by using a temp local variable.

Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
---

v1 -> v2: 
 - Use a temp local variable (Dave)

 migration/rdma.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

Comments

Dr. David Alan Gilbert March 4, 2019, 6:53 p.m. UTC | #1
* Marcel Apfelbaum (marcel.apfelbaum@gmail.com) wrote:
> Configuring QEMU with:
>         ../configure --cc=clang --enable-rdma
> 
> Leads to compilation error:
> 
>   CC      migration/rdma.o
>   CC      migration/block.o
>   qemu/migration/rdma.c:3615:58: error: taking address of packed member 'rkey' of class or structure
>       'RDMARegisterResult' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]
>                             (uintptr_t)host_addr, NULL, &reg_result->rkey,
>                                                          ^~~~~~~~~~~~~~~~
> Fix it by using a temp local variable.
> 
> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>

Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com>

> ---
> 
> v1 -> v2: 
>  - Use a temp local variable (Dave)
> 
>  migration/rdma.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/migration/rdma.c b/migration/rdma.c
> index 54a3c11540..e39ee77558 100644
> --- a/migration/rdma.c
> +++ b/migration/rdma.c
> @@ -3611,13 +3611,16 @@ static int qemu_rdma_registration_handle(QEMUFile *f, void *opaque)
>                  }
>                  chunk_start = ram_chunk_start(block, chunk);
>                  chunk_end = ram_chunk_end(block, chunk + reg->chunks);
> +                /* avoid "-Waddress-of-packed-member" warning */
> +                uint32_t tmp_rkey = 0;
>                  if (qemu_rdma_register_and_get_keys(rdma, block,
> -                            (uintptr_t)host_addr, NULL, &reg_result->rkey,
> +                            (uintptr_t)host_addr, NULL, &tmp_rkey,
>                              chunk, chunk_start, chunk_end)) {
>                      error_report("cannot get rkey");
>                      ret = -EINVAL;
>                      goto out;
>                  }
> +                reg_result->rkey = tmp_rkey;
>  
>                  reg_result->host_addr = (uintptr_t)block->local_host_addr;
>  
> -- 
> 2.17.1
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
Philippe Mathieu-Daudé March 4, 2019, 11:25 p.m. UTC | #2
On 3/4/19 7:49 PM, Marcel Apfelbaum wrote:
> Configuring QEMU with:
>         ../configure --cc=clang --enable-rdma
> 
> Leads to compilation error:
> 
>   CC      migration/rdma.o
>   CC      migration/block.o
>   qemu/migration/rdma.c:3615:58: error: taking address of packed member 'rkey' of class or structure
>       'RDMARegisterResult' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]
>                             (uintptr_t)host_addr, NULL, &reg_result->rkey,
>                                                          ^~~~~~~~~~~~~~~~
> Fix it by using a temp local variable.
> 
> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
> ---
> 
> v1 -> v2: 
>  - Use a temp local variable (Dave)

Way cleaner than your v1 :)

> 
>  migration/rdma.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/migration/rdma.c b/migration/rdma.c
> index 54a3c11540..e39ee77558 100644
> --- a/migration/rdma.c
> +++ b/migration/rdma.c
> @@ -3611,13 +3611,16 @@ static int qemu_rdma_registration_handle(QEMUFile *f, void *opaque)
>                  }
>                  chunk_start = ram_chunk_start(block, chunk);
>                  chunk_end = ram_chunk_end(block, chunk + reg->chunks);
> +                /* avoid "-Waddress-of-packed-member" warning */

No sure the comment is helpful.

> +                uint32_t tmp_rkey = 0;

Probably no need to zero-initialize.

Anyway:
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>

>                  if (qemu_rdma_register_and_get_keys(rdma, block,
> -                            (uintptr_t)host_addr, NULL, &reg_result->rkey,
> +                            (uintptr_t)host_addr, NULL, &tmp_rkey,
>                              chunk, chunk_start, chunk_end)) {
>                      error_report("cannot get rkey");
>                      ret = -EINVAL;
>                      goto out;
>                  }
> +                reg_result->rkey = tmp_rkey;
>  
>                  reg_result->host_addr = (uintptr_t)block->local_host_addr;
>  
>
Dr. David Alan Gilbert March 5, 2019, 1:25 p.m. UTC | #3
* Marcel Apfelbaum (marcel.apfelbaum@gmail.com) wrote:
> Configuring QEMU with:
>         ../configure --cc=clang --enable-rdma
> 
> Leads to compilation error:
> 
>   CC      migration/rdma.o
>   CC      migration/block.o
>   qemu/migration/rdma.c:3615:58: error: taking address of packed member 'rkey' of class or structure
>       'RDMARegisterResult' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]
>                             (uintptr_t)host_addr, NULL, &reg_result->rkey,
>                                                          ^~~~~~~~~~~~~~~~
> Fix it by using a temp local variable.
> 
> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>

Queued

> ---
> 
> v1 -> v2: 
>  - Use a temp local variable (Dave)
> 
>  migration/rdma.c | 5 ++++-
>  1 file changed, 4 insertions(+), 1 deletion(-)
> 
> diff --git a/migration/rdma.c b/migration/rdma.c
> index 54a3c11540..e39ee77558 100644
> --- a/migration/rdma.c
> +++ b/migration/rdma.c
> @@ -3611,13 +3611,16 @@ static int qemu_rdma_registration_handle(QEMUFile *f, void *opaque)
>                  }
>                  chunk_start = ram_chunk_start(block, chunk);
>                  chunk_end = ram_chunk_end(block, chunk + reg->chunks);
> +                /* avoid "-Waddress-of-packed-member" warning */
> +                uint32_t tmp_rkey = 0;
>                  if (qemu_rdma_register_and_get_keys(rdma, block,
> -                            (uintptr_t)host_addr, NULL, &reg_result->rkey,
> +                            (uintptr_t)host_addr, NULL, &tmp_rkey,
>                              chunk, chunk_start, chunk_end)) {
>                      error_report("cannot get rkey");
>                      ret = -EINVAL;
>                      goto out;
>                  }
> +                reg_result->rkey = tmp_rkey;
>  
>                  reg_result->host_addr = (uintptr_t)block->local_host_addr;
>  
> -- 
> 2.17.1
> 
> 
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
diff mbox series

Patch

diff --git a/migration/rdma.c b/migration/rdma.c
index 54a3c11540..e39ee77558 100644
--- a/migration/rdma.c
+++ b/migration/rdma.c
@@ -3611,13 +3611,16 @@  static int qemu_rdma_registration_handle(QEMUFile *f, void *opaque)
                 }
                 chunk_start = ram_chunk_start(block, chunk);
                 chunk_end = ram_chunk_end(block, chunk + reg->chunks);
+                /* avoid "-Waddress-of-packed-member" warning */
+                uint32_t tmp_rkey = 0;
                 if (qemu_rdma_register_and_get_keys(rdma, block,
-                            (uintptr_t)host_addr, NULL, &reg_result->rkey,
+                            (uintptr_t)host_addr, NULL, &tmp_rkey,
                             chunk, chunk_start, chunk_end)) {
                     error_report("cannot get rkey");
                     ret = -EINVAL;
                     goto out;
                 }
+                reg_result->rkey = tmp_rkey;
 
                 reg_result->host_addr = (uintptr_t)block->local_host_addr;