Skip to contentSkip to conversation

vhost: Allow abutting regions

PATCH Superseded Dr. David Alan Gilbert (git) 2 participants 5 messages Mar 23, 2018

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 vhost: Allow abutting regions

From: "Dr. David Alan Gilbert" <[email protected]>

My rework of section adding combines overlapping or abutting regions, but checks they're actually the same underlying RAM block.
Fix the case where two blocks abut but don't overlap; that new region should get added (but not combined), but my previous patch was disallowing it.

Fixes c1ece84e7c9
---
 hw/virtio/vhost.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
hw/virtio/vhost.c +9 -4
index 250f886acb..fc9062a89f 100644
@@ -595,10 +595,15 @@ static void vhost_region_add_section(struct vhost_dev *dev,
                                         prev_sec->offset_within_address_space,
                                         prev_sec->offset_within_region);
             } else {
-                error_report("%s: Overlapping but not coherent sections "
-                             "at %"PRIx64,
-                             __func__, mrs_gpa);
-                return;
+                /* abutting regions are fine, but overlapping ones with
+                 * different blocks/offsets shouldn't happen
+                 */
+                if (mrs_gpa != prev_gpa_end + 1) {
+                    error_report("%s: Overlapping but not coherent sections "
+                                 "at %"PRIx64,
+                                 __func__, mrs_gpa);
+                    return;
+                }
             }
         }
     }
Signature · 1 line
2.14.3
#1 lore raw
Quoted 11 lines · Dr. David Alan Gilbert (git)

From: "Dr. David Alan Gilbert" <[email protected]>

My rework of section adding combines overlapping or abutting regions, but checks they're actually the same underlying RAM block.
Fix the case where two blocks abut but don't overlap; that new region should get added (but not combined), but my previous patch was disallowing it.

Fixes c1ece84e7c9

Can we replace abutting with adjacent pls?

Quoted 30 lines
---
 hw/virtio/vhost.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
hw/virtio/vhost.c +9 -4
index 250f886acb..fc9062a89f 100644
@@ -595,10 +595,15 @@ static void vhost_region_add_section(struct vhost_dev *dev,
                                         prev_sec->offset_within_address_space,
                                         prev_sec->offset_within_region);
             } else {
-                error_report("%s: Overlapping but not coherent sections "
-                             "at %"PRIx64,
-                             __func__, mrs_gpa);
-                return;
+                /* abutting regions are fine, but overlapping ones with
+                 * different blocks/offsets shouldn't happen
+                 */
+                if (mrs_gpa != prev_gpa_end + 1) {
+                    error_report("%s: Overlapping but not coherent sections "
+                                 "at %"PRIx64,
+                                 __func__, mrs_gpa);
+                    return;
+                }
             }
         }
     }
Signature · 1 line
2.14.3
#2 lore raw
Quoted 8 lines · * Michael S. Tsirkin ([email protected]) wrote:
Quoted 7 lines · Dr. David Alan Gilbert (git)

From: "Dr. David Alan Gilbert" <[email protected]>

My rework of section adding combines overlapping or abutting regions, but checks they're actually the same underlying RAM block.
Fix the case where two blocks abut but don't overlap; that new region should get added (but not combined), but my previous patch was disallowing it.

Quoted 6 lines
Quoted 4 lines
Fixes c1ece84e7c9

Can we replace abutting with adjacent pls?

Sure; do you want to fix that in commit?

Dave

Quoted 22 lines
Quoted 22 lines
---
 hw/virtio/vhost.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
hw/virtio/vhost.c +6 -4
index 250f886acb..fc9062a89f 100644
@@ -595,10 +595,15 @@ static void vhost_region_add_section(struct vhost_dev *dev,
                                         prev_sec->offset_within_address_space,
                                         prev_sec->offset_within_region);
             } else {
-                error_report("%s: Overlapping but not coherent sections "
-                             "at %"PRIx64,
-                             __func__, mrs_gpa);
-                return;
+                /* abutting regions are fine, but overlapping ones with
+                 * different blocks/offsets shouldn't happen
+                 */
+                if (mrs_gpa != prev_gpa_end + 1) {
+                    error_report("%s: Overlapping but not coherent sections "
+                                 "at %"PRIx64,
Quoted 8 lines
Quoted 8 lines
hw/virtio/vhost.c +3 -0
+                                 __func__, mrs_gpa);
+                    return;
+                }
             }
         }
     }
Signature · 1 line
2.14.3

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

#3 lore raw
Quoted 11 lines · Dr. David Alan Gilbert
Quoted 10 lines · * Michael S. Tsirkin ([email protected]) wrote:
Quoted 9 lines · Dr. David Alan Gilbert (git)

From: "Dr. David Alan Gilbert" <[email protected]>

My rework of section adding combines overlapping or abutting regions, but checks they're actually the same underlying RAM block.
Fix the case where two blocks abut but don't overlap; that new region should get added (but not combined), but my previous patch was disallowing it.

Fixes c1ece84e7c9
Quoted 8 lines
Quoted 4 lines
Quoted 2 lines

Can we replace abutting with adjacent pls?

Sure; do you want to fix that in commit?

Dave

Rather.

Quoted 32 lines
Quoted 22 lines
Quoted 22 lines
---
 hw/virtio/vhost.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
hw/virtio/vhost.c +6 -4
index 250f886acb..fc9062a89f 100644
@@ -595,10 +595,15 @@ static void vhost_region_add_section(struct vhost_dev *dev,
                                         prev_sec->offset_within_address_space,
                                         prev_sec->offset_within_region);
             } else {
-                error_report("%s: Overlapping but not coherent sections "
-                             "at %"PRIx64,
-                             __func__, mrs_gpa);
-                return;
+                /* abutting regions are fine, but overlapping ones with
+                 * different blocks/offsets shouldn't happen
+                 */
+                if (mrs_gpa != prev_gpa_end + 1) {
+                    error_report("%s: Overlapping but not coherent sections "
+                                 "at %"PRIx64,
Quoted 8 lines
Quoted 8 lines
hw/virtio/vhost.c +3 -0
+                                 __func__, mrs_gpa);
+                    return;
+                }
             }
         }
     }
Signature · 1 line
2.14.3

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

#4 lore raw
In reply to Dr. David Alan Gilbert (git)
Quoted 11 lines · Dr. David Alan Gilbert (git)

From: "Dr. David Alan Gilbert" <[email protected]>

My rework of section adding combines overlapping or abutting regions, but checks they're actually the same underlying RAM block.
Fix the case where two blocks abut but don't overlap; that new region should get added (but not combined), but my previous patch was disallowing it.

Fixes c1ece84e7c9

I prefer adjacent and not abutting.

Quoted 30 lines
---
 hw/virtio/vhost.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
hw/virtio/vhost.c +9 -4
index 250f886acb..fc9062a89f 100644
@@ -595,10 +595,15 @@ static void vhost_region_add_section(struct vhost_dev *dev,
                                         prev_sec->offset_within_address_space,
                                         prev_sec->offset_within_region);
             } else {
-                error_report("%s: Overlapping but not coherent sections "
-                             "at %"PRIx64,
-                             __func__, mrs_gpa);
-                return;
+                /* abutting regions are fine, but overlapping ones with
+                 * different blocks/offsets shouldn't happen
+                 */
+                if (mrs_gpa != prev_gpa_end + 1) {
+                    error_report("%s: Overlapping but not coherent sections "
+                                 "at %"PRIx64,
+                                 __func__, mrs_gpa);
+                    return;
+                }
             }
         }
     }
Signature · 1 line
2.14.3