[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH V1 01/16] x86/ioreq: Prepare IOREQ feature for making it common
On 21.09.2020 16:43, Oleksandr wrote: > On 21.09.20 16:29, Jan Beulich wrote: >> On 21.09.2020 14:47, Oleksandr wrote: >>> On 21.09.20 15:31, Jan Beulich wrote: >>>> On 21.09.2020 14:22, Oleksandr wrote: >>>>> On 14.09.20 16:52, Jan Beulich wrote: >>>>>> On 10.09.2020 22:21, Oleksandr Tyshchenko wrote: >>>>>>> @@ -1215,8 +1233,7 @@ void hvm_destroy_all_ioreq_servers(struct domain >>>>>>> *d) >>>>>>> struct hvm_ioreq_server *s; >>>>>>> unsigned int id; >>>>>>> >>>>>>> - if ( !relocate_portio_handler(d, 0xcf8, 0xcf8, 4) ) >>>>>>> - return; >>>>>>> + arch_hvm_ioreq_destroy(d); >>>>>> So the call to relocate_portio_handler() simply goes away. No >>>>>> replacement, no explanation? >>>>> As I understand from the review comment on that for the RFC patch, there >>>>> is no >>>>> a lot of point of keeping this. Indeed, looking at the code I got the >>>>> same opinion. >>>>> I should have added an explanation in the commit description at least. >>>>> Or shall I return the call back? >>>> If there's a reason to drop it (which I can't see, but I also >>>> don't recall seeing the discussion you're mentioning), then doing >>>> so should be a separate patch with suitable reasoning. In the >>>> patch here you definitely should only transform what's already >>>> there. >>> Sounds reasonable. Please see the comment below >>> relocate_portio_handler() here: >>> https://www.mail-archive.com/xen-devel@xxxxxxxxxxxxxxxxxxxx/msg78512.html >>> >>> However, I might interpret the request incorrectly. >> I'm afraid you do: The way you've coded it the function was a no-op. >> But that's because you broke the caller by not bailing from >> hvm_destroy_all_ioreq_servers() if relocate_portio_handler() returned >> false. IOW you did assume that moving the "return" statement into an >> inline function would have an effect on its caller(s). For questions >> like this one it also often helps to look at the commit introducing >> the construct in question (b3344bb1cae0 in this case): Chances are >> that the description helps, albeit I agree there are many cases >> (particularly the farther you get into distant past) where it isn't >> of much help. > > > Hmm, now it's clear to me what I did wrong. By calling > relocate_portio_handler() here we don't really want to relocate > something, we just use it as a flag to indicate whether we need to > actually release IOREQ resources down the > hvm_destroy_all_ioreq_servers(). Thank you for the explanation, it > wasn't obvious to me at the beginning. But, now the question is how to > do it in a correct way and retain current behavior (to not break callers)? > > I see two options here: > 1. Place the check of relocate_portio_handler() in > arch_hvm_ioreq_destroy() and make the later returning bool. > The "common" hvm_destroy_all_ioreq_servers() will check for the > return value and bail out if false. > 2. Don't use relocate_portio_handler(), instead introduce a flag into > struct hvm_domain's ioreq_server sub-structure. > > > Personally I don't like much the option 1 and option 2 is a little bit > overhead. Well, 1 is what matches current behavior, so I'd advocate for you not changing the abstract model. Or else, again, change the abstract model in a separate prereq patch. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |