Skip to contentSkip to conversation

vhost: Allow adjoining regions

PATCH In review Dr. David Alan Gilbert (git) 2 participants 4 messages Mar 23, 2018 – Apr 5, 2018

lore
Share & tools
lore
#0 lore raw

PATCH v2 1/1 vhost: Allow adjoining regions

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

My rework of section adding combines overlapping or adjoining regions, but checks they're actually the same underlying RAM block.
Fix the case where two blocks adjoin 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..2a720cca3d 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;
+                /* adjoining 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
Tested-by on v2 1/1
#1 lore raw
Quoted 7 lines · On Fri, 23 Mar 2018 15:39:39 +0000 "Dr. David Alan Gilbert (git)"…

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

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

Quoted 5 lines
Fixes c1ece84e7c9

---

Ping? This error report is a regression and should be considered for 2.12.

Quoted 27 lines
 hw/virtio/vhost.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
hw/virtio/vhost.c +9 -4
index 250f886acb..2a720cca3d 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;
+                /* adjoining 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;
+                }
             }
         }
     }
#2 lore raw
Quoted 17 lines · * Alex Williamson ([email protected]) wrote:
Quoted 7 lines · On Fri, 23 Mar 2018 15:39:39 +0000 "Dr. David Alan Gilbert (git)"…

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

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

Quoted 5 lines
Fixes c1ece84e7c9

---

Quoted 4 lines

Ping? This error report is a regression and should be considered for 2.12.

It's a change in vhost - so mst is taking it ?

Dave

Quoted 20 lines
Quoted 20 lines
 hw/virtio/vhost.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
hw/virtio/vhost.c +4 -4
index 250f886acb..2a720cca3d 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;
+                /* adjoining regions are fine, but overlapping ones with
+                 * different blocks/offsets shouldn't happen
+                 */
+                if (mrs_gpa != prev_gpa_end + 1) {
Quoted 9 lines

hw/virtio/vhost.c static void vhost_region_add_section(struct vhost_dev *dev, · line 609

Quoted 8 lines
hw/virtio/vhost.c +5 -0
+                    error_report("%s: Overlapping but not coherent sections "
+                                 "at %"PRIx64,
+                                 __func__, mrs_gpa);
+                    return;
+                }
             }
         }
     }

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

#3 lore raw
Quoted 18 lines · On Thu, 5 Apr 2018 20:46:55 +0100 "Dr. David Alan Gilbert"…
Quoted 17 lines · * Alex Williamson ([email protected]) wrote:
Quoted 12 lines · On Fri, 23 Mar 2018 15:39:39 +0000 "Dr. David Alan Gilbert (git)"…

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

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

Fixes c1ece84e7c9

---

Quoted 6 lines
Quoted 4 lines

Ping? This error report is a regression and should be considered for 2.12.

It's a change in vhost - so mst is taking it ?

That's my assumption, sorry, I should have set to/cc explicitly rather than just replying. Thanks,

Alex

Quoted 30 lines
Quoted 19 lines
Quoted 19 lines
 hw/virtio/vhost.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)
hw/virtio/vhost.c +4 -4
index 250f886acb..2a720cca3d 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;
+                /* adjoining regions are fine, but overlapping ones with
+                 * different blocks/offsets shouldn't happen
+                 */
+                if (mrs_gpa != prev_gpa_end + 1) {
Quoted 9 lines

hw/virtio/vhost.c static void vhost_region_add_section(struct vhost_dev *dev, · line 609

Quoted 8 lines
hw/virtio/vhost.c +5 -0
+                    error_report("%s: Overlapping but not coherent sections "
+                                 "at %"PRIx64,
+                                 __func__, mrs_gpa);
+                    return;
+                }
             }
         }
     }  

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