Patchwork [17/41] block-migration: document usage of state across threads

login
register
mail settings
Submitter Paolo Bonzini
Date Feb. 15, 2013, 5:46 p.m.
Message ID <1360950433-17106-18-git-send-email-pbonzini@redhat.com>
Download mbox | patch
Permalink /patch/220788/
State New
Headers show

Comments

Paolo Bonzini - Feb. 15, 2013, 5:46 p.m.
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block-migration.c |   23 ++++++++++++++++++-----
 1 files changed, 18 insertions(+), 5 deletions(-)
Orit Wasserman - Feb. 18, 2013, 1:50 p.m.
On 02/15/2013 07:46 PM, Paolo Bonzini wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
> ---
>  block-migration.c |   23 ++++++++++++++++++-----
>  1 files changed, 18 insertions(+), 5 deletions(-)
> 
> diff --git a/block-migration.c b/block-migration.c
> index fe3c040..21842b2 100644
> --- a/block-migration.c
> +++ b/block-migration.c
> @@ -43,18 +43,24 @@
>  #endif
>  
>  typedef struct BlkMigDevState {
> +    /* Written during setup phase.  Can be read without a lock.  */
>      BlockDriverState *bs;
> -    int bulk_completed;
>      int shared_base;
> -    int64_t cur_sector;
> -    int64_t cur_dirty;
> -    int64_t completed_sectors;
>      int64_t total_sectors;
>      QSIMPLEQ_ENTRY(BlkMigDevState) entry;
> +
> +    /* Only used by migration thread.  Does not need a lock.  */
> +    int bulk_completed;
> +    int64_t cur_sector;
> +    int64_t cur_dirty;
> +
> +    /* Protected by iothread lock.  */
>      unsigned long *aio_bitmap;
> +    int64_t completed_sectors;
>  } BlkMigDevState;
>  
>  typedef struct BlkMigBlock {
> +    /* Only used by migration thread.  */
>      uint8_t *buf;
>      BlkMigDevState *bmds;
>      int64_t sector;
> @@ -62,19 +68,26 @@ typedef struct BlkMigBlock {
>      struct iovec iov;
>      QEMUIOVector qiov;
>      BlockDriverAIOCB *aiocb;
> +
> +    /* Protected by iothread lock.  */
>      int ret;
>      QSIMPLEQ_ENTRY(BlkMigBlock) entry;
>  } BlkMigBlock;
>  
>  typedef struct BlkMigState {
> +    /* Written during setup phase.  Can be read without a lock.  */
>      int blk_enable;
>      int shared_base;
>      QSIMPLEQ_HEAD(bmds_list, BlkMigDevState) bmds_list;
> +    int64_t total_sector_sum;
> +
> +    /* Protected by iothread lock.  */
>      QSIMPLEQ_HEAD(blk_list, BlkMigBlock) blk_list;
>      int submitted;
>      int read_done;
> +
> +    /* Only used by migration thread.  Does not need a lock.  */
>      int transferred;
> -    int64_t total_sector_sum;
>      int prev_progress;
>      int bulk_completed;
>  } BlkMigState;
> 
Maybe update the commit message of the code movements.

Reviewed-by: Orit Wasserman <owasserm@redhat.com>
Juan Quintela - Feb. 22, 2013, 10:52 a.m.
Paolo Bonzini <pbonzini@redhat.com> wrote:
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>

Acked-by: Juan Quintela <quintela@redhat.com>

Patch

diff --git a/block-migration.c b/block-migration.c
index fe3c040..21842b2 100644
--- a/block-migration.c
+++ b/block-migration.c
@@ -43,18 +43,24 @@ 
 #endif
 
 typedef struct BlkMigDevState {
+    /* Written during setup phase.  Can be read without a lock.  */
     BlockDriverState *bs;
-    int bulk_completed;
     int shared_base;
-    int64_t cur_sector;
-    int64_t cur_dirty;
-    int64_t completed_sectors;
     int64_t total_sectors;
     QSIMPLEQ_ENTRY(BlkMigDevState) entry;
+
+    /* Only used by migration thread.  Does not need a lock.  */
+    int bulk_completed;
+    int64_t cur_sector;
+    int64_t cur_dirty;
+
+    /* Protected by iothread lock.  */
     unsigned long *aio_bitmap;
+    int64_t completed_sectors;
 } BlkMigDevState;
 
 typedef struct BlkMigBlock {
+    /* Only used by migration thread.  */
     uint8_t *buf;
     BlkMigDevState *bmds;
     int64_t sector;
@@ -62,19 +68,26 @@  typedef struct BlkMigBlock {
     struct iovec iov;
     QEMUIOVector qiov;
     BlockDriverAIOCB *aiocb;
+
+    /* Protected by iothread lock.  */
     int ret;
     QSIMPLEQ_ENTRY(BlkMigBlock) entry;
 } BlkMigBlock;
 
 typedef struct BlkMigState {
+    /* Written during setup phase.  Can be read without a lock.  */
     int blk_enable;
     int shared_base;
     QSIMPLEQ_HEAD(bmds_list, BlkMigDevState) bmds_list;
+    int64_t total_sector_sum;
+
+    /* Protected by iothread lock.  */
     QSIMPLEQ_HEAD(blk_list, BlkMigBlock) blk_list;
     int submitted;
     int read_done;
+
+    /* Only used by migration thread.  Does not need a lock.  */
     int transferred;
-    int64_t total_sector_sum;
     int prev_progress;
     int bulk_completed;
 } BlkMigState;