Message ID | 20190304184923.24215-1-marcel.apfelbaum@gmail.com |
---|---|
State | New |
Headers | show |
Series | [V2] migration/rdma: clang compilation fix | expand |
* 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, ®_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, ®_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
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, ®_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, ®_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; > >
* 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, ®_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, ®_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 --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, ®_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;
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, ®_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(-)