[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: Ping: [PATCH] Argo: drop meaningless mfn_valid() check
On Sun, Dec 17, 2023 at 11:55 PM Jan Beulich <jbeulich@xxxxxxxx> wrote: > > Christopher, > > On 27.11.2023 14:55, Jan Beulich wrote: > > Holding a valid struct page_info * in hands already means the referenced > > MFN is valid; there's no need to check that again. Convert the checking > > logic to a switch(), to help keeping the extra (and questionable) x86- > > only check in somewhat tidy shape. > > > > Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx> Reviewed-by: Christopher Clark <christopher.w.clark@xxxxxxxxx> > > much like "Argo: don't obtain excess page references" (with which the one > here actually also conflicts), this one is awaiting your ack or otherwise. > Note that the other one has now been pending for quite a bit more than a > year. I hope the same isn't going to happen here ... Thanks for your patience and the reminders, appreciated and this patch can be applied. Christopher > > Thanks, Jan > > > --- > > Initially I had this (with less code churn) as > > > > #ifdef CONFIG_X86 > > if ( p2mt == p2m_ram_logdirty ) > > ret = -EAGAIN; > > else > > #endif > > if ( (p2mt != p2m_ram_rw) || > > !get_page_type(page, PGT_writable_page) ) > > ret = -EINVAL; > > > > But the "else" placement seemed too ugly to me. Otoh there better > > wouldn't be any special casing of log-dirty here (and instead such a > > page be converted, perhaps right in check_get_page_from_gfn() when > > readonly=false), at which point the odd "else" would go away, and the > > if() likely again be preferable over the switch(). > > > > --- a/xen/common/argo.c > > +++ b/xen/common/argo.c > > @@ -1421,15 +1421,24 @@ find_ring_mfn(struct domain *d, gfn_t gf > > return ret; > > > > *mfn = page_to_mfn(page); > > - if ( !mfn_valid(*mfn) ) > > - ret = -EINVAL; > > + > > + switch ( p2mt ) > > + { > > + case p2m_ram_rw: > > + if ( !get_page_and_type(page, d, PGT_writable_page) ) > > + ret = -EINVAL; > > + break; > > + > > #ifdef CONFIG_X86 > > - else if ( p2mt == p2m_ram_logdirty ) > > + case p2m_ram_logdirty: > > ret = -EAGAIN; > > + break; > > #endif > > - else if ( (p2mt != p2m_ram_rw) || > > - !get_page_and_type(page, d, PGT_writable_page) ) > > + > > + default: > > ret = -EINVAL; > > + break; > > + } > > > > put_page(page); > > > > >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |