From: Roman Kisel <rom...@linux.microsoft.com> Sent: Tuesday, June 3, 2025 5:44 PM > > It might happen that some hyp SynIC pages aren't IO mapped. > > Use memunmap() that checks for that and only then calls iounmap()
I'm concerned by the lack of symmetry in using io_remap_cache() to do the mapping, and then memunmap() to remove it. The issue is presumably that hyp_synic_[message/event]_page might be NULL? Or is there some other case? But I'm thinking it would be better to explicitly test for NULL and only call iounmap() if non-NULL. Then there's no dependence on the implementation of memumap(). Not doing the explicit test for NULL actually caused the problem in the first place. When the paravisor and root partition code was introduced, iounmap() did a test and just returned, so everything worked. Then commit 50c6dbdfd16e was added in the 6.12 kernel, and iounmap() started generating a WARN if NULL is passed in. Michael > > Signed-off-by: Roman Kisel <rom...@linux.microsoft.com> > --- > drivers/hv/hv.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c > index 6a4857def82d..9a66656d89e0 100644 > --- a/drivers/hv/hv.c > +++ b/drivers/hv/hv.c > @@ -358,7 +358,7 @@ void hv_synic_disable_regs(unsigned int cpu) > */ > simp.simp_enabled = 0; > if (ms_hyperv.paravisor_present || hv_root_partition()) { > - iounmap(hv_cpu->hyp_synic_message_page); > + memunmap(hv_cpu->hyp_synic_message_page); > hv_cpu->hyp_synic_message_page = NULL; > } else { > simp.base_simp_gpa = 0; > @@ -370,7 +370,7 @@ void hv_synic_disable_regs(unsigned int cpu) > siefp.siefp_enabled = 0; > > if (ms_hyperv.paravisor_present || hv_root_partition()) { > - iounmap(hv_cpu->hyp_synic_event_page); > + memunmap(hv_cpu->hyp_synic_event_page); > hv_cpu->hyp_synic_event_page = NULL; > } else { > siefp.base_siefp_gpa = 0; > -- > 2.43.0