|
@@ -428,14 +428,13 @@ struct dm_info_msg {
|
|
* currently hot added. We hot add in multiples of 128M
|
|
* currently hot added. We hot add in multiples of 128M
|
|
* chunks; it is possible that we may not be able to bring
|
|
* chunks; it is possible that we may not be able to bring
|
|
* online all the pages in the region. The range
|
|
* online all the pages in the region. The range
|
|
- * covered_start_pfn : covered_end_pfn defines the pages that can
|
|
|
|
|
|
+ * covered_end_pfn defines the pages that can
|
|
* be brough online.
|
|
* be brough online.
|
|
*/
|
|
*/
|
|
|
|
|
|
struct hv_hotadd_state {
|
|
struct hv_hotadd_state {
|
|
struct list_head list;
|
|
struct list_head list;
|
|
unsigned long start_pfn;
|
|
unsigned long start_pfn;
|
|
- unsigned long covered_start_pfn;
|
|
|
|
unsigned long covered_end_pfn;
|
|
unsigned long covered_end_pfn;
|
|
unsigned long ha_end_pfn;
|
|
unsigned long ha_end_pfn;
|
|
unsigned long end_pfn;
|
|
unsigned long end_pfn;
|
|
@@ -679,8 +678,7 @@ static void hv_online_page(struct page *pg)
|
|
|
|
|
|
list_for_each(cur, &dm_device.ha_region_list) {
|
|
list_for_each(cur, &dm_device.ha_region_list) {
|
|
has = list_entry(cur, struct hv_hotadd_state, list);
|
|
has = list_entry(cur, struct hv_hotadd_state, list);
|
|
- cur_start_pgp = (unsigned long)
|
|
|
|
- pfn_to_page(has->covered_start_pfn);
|
|
|
|
|
|
+ cur_start_pgp = (unsigned long)pfn_to_page(has->start_pfn);
|
|
cur_end_pgp = (unsigned long)pfn_to_page(has->covered_end_pfn);
|
|
cur_end_pgp = (unsigned long)pfn_to_page(has->covered_end_pfn);
|
|
|
|
|
|
if (((unsigned long)pg >= cur_start_pgp) &&
|
|
if (((unsigned long)pg >= cur_start_pgp) &&
|
|
@@ -692,7 +690,6 @@ static void hv_online_page(struct page *pg)
|
|
__online_page_set_limits(pg);
|
|
__online_page_set_limits(pg);
|
|
__online_page_increment_counters(pg);
|
|
__online_page_increment_counters(pg);
|
|
__online_page_free(pg);
|
|
__online_page_free(pg);
|
|
- has->covered_start_pfn++;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
@@ -736,10 +733,9 @@ static bool pfn_covered(unsigned long start_pfn, unsigned long pfn_cnt)
|
|
* is, update it.
|
|
* is, update it.
|
|
*/
|
|
*/
|
|
|
|
|
|
- if (has->covered_end_pfn != start_pfn) {
|
|
|
|
|
|
+ if (has->covered_end_pfn != start_pfn)
|
|
has->covered_end_pfn = start_pfn;
|
|
has->covered_end_pfn = start_pfn;
|
|
- has->covered_start_pfn = start_pfn;
|
|
|
|
- }
|
|
|
|
|
|
+
|
|
return true;
|
|
return true;
|
|
|
|
|
|
}
|
|
}
|
|
@@ -784,7 +780,6 @@ static unsigned long handle_pg_range(unsigned long pg_start,
|
|
pgs_ol = pfn_cnt;
|
|
pgs_ol = pfn_cnt;
|
|
hv_bring_pgs_online(start_pfn, pgs_ol);
|
|
hv_bring_pgs_online(start_pfn, pgs_ol);
|
|
has->covered_end_pfn += pgs_ol;
|
|
has->covered_end_pfn += pgs_ol;
|
|
- has->covered_start_pfn += pgs_ol;
|
|
|
|
pfn_cnt -= pgs_ol;
|
|
pfn_cnt -= pgs_ol;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -845,7 +840,6 @@ static unsigned long process_hot_add(unsigned long pg_start,
|
|
list_add_tail(&ha_region->list, &dm_device.ha_region_list);
|
|
list_add_tail(&ha_region->list, &dm_device.ha_region_list);
|
|
ha_region->start_pfn = rg_start;
|
|
ha_region->start_pfn = rg_start;
|
|
ha_region->ha_end_pfn = rg_start;
|
|
ha_region->ha_end_pfn = rg_start;
|
|
- ha_region->covered_start_pfn = pg_start;
|
|
|
|
ha_region->covered_end_pfn = pg_start;
|
|
ha_region->covered_end_pfn = pg_start;
|
|
ha_region->end_pfn = rg_start + rg_size;
|
|
ha_region->end_pfn = rg_start + rg_size;
|
|
}
|
|
}
|