Re: [PATCH V1 13/13] mshv: pin all ram mem regions if partition has device passthru

Mukesh R
2026-04-28T02:23:17Z

Please ignore this patch, something went wrong during merge/rebase.
The setting of pt_regions_pinned should be in a different function.

Thanks,
-Mukesh

On 4/21/26 19:32, Mukesh R wrote:
> Given the sporadic errors, mostly from high end devices, when regions are
> not pinned and a PCI device is passthru'd to a VM, for now, force all
> regions for the VM to be pinned. Even tho VFIO may pin them, the regions
> would still be marked movable, so do it upfront in mshv.
>
> Signed-off-by: Mukesh R <mrathor@linux.microsoft.com>
> ---
> drivers/hv/mshv_root.h | 6 ++++++
> drivers/hv/mshv_root_main.c | 5 ++++-
> 2 files changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/hv/mshv_root.h b/drivers/hv/mshv_root.h
> index b9880d0bdc4d..32260df84f86 100644
> --- a/drivers/hv/mshv_root.h
> +++ b/drivers/hv/mshv_root.h
> @@ -141,6 +141,7 @@ struct mshv_partition {
> pid_t pt_vmm_tgid;
> bool import_completed;
> bool pt_initialized;
> + bool pt_regions_pinned;
> #if IS_ENABLED(CONFIG_DEBUG_FS)
> struct dentry *pt_stats_dentry;
> struct dentry *pt_vp_dentry;
> @@ -277,6 +278,11 @@ static inline bool mshv_partition_encrypted(struct mshv_partition *partition)
> return partition->isolation_type == HV_PARTITION_ISOLATION_TYPE_SNP;
> }
>
> +static inline bool mshv_pt_regions_pinned(struct mshv_partition *pt)
> +{
> + return pt->pt_regions_pinned || mshv_partition_encrypted(pt);
> +}
> +
> struct mshv_partition *mshv_partition_get(struct mshv_partition *partition);
> void mshv_partition_put(struct mshv_partition *partition);
> struct mshv_partition *mshv_partition_find(u64 partition_id) __must_hold(RCU);
> diff --git a/drivers/hv/mshv_root_main.c b/drivers/hv/mshv_root_main.c
> index a7864463961b..251cf88a2b0b 100644
> --- a/drivers/hv/mshv_root_main.c
> +++ b/drivers/hv/mshv_root_main.c
> @@ -1333,7 +1333,7 @@ static int mshv_partition_create_region(struct mshv_partition *partition,
>
> if (is_mmio)
> rg->mreg_type = MSHV_REGION_TYPE_MMIO;
> - else if (mshv_partition_encrypted(partition) ||
> + else if (mshv_pt_regions_pinned(partition) ||
> !mshv_region_movable_init(rg))
> rg->mreg_type = MSHV_REGION_TYPE_MEM_PINNED;
> else
> @@ -1406,6 +1406,9 @@ static int mshv_prepare_pinned_region(struct mshv_mem_region *region)
> goto err_out;
> }
>
> + /* For now, all regions must be pinned if there is device passthru. */
> + partition->pt_regions_pinned = true;
> +
> return 0;
>