[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 1/5] xen/riscv: add stub for share_xen_page_with_guest()
On 18.10.2024 17:57, oleksii.kurochko@xxxxxxxxx wrote: > On Fri, 2024-10-18 at 15:27 +0200, Jan Beulich wrote: >> On 18.10.2024 15:10, oleksii.kurochko@xxxxxxxxx wrote: >>> On Thu, 2024-10-17 at 16:51 +0200, Jan Beulich wrote: >>>> On 16.10.2024 11:15, Oleksii Kurochko wrote: >>>>> To avoid the following linkage fail the stub for >>>>> share_xen_page_with_guest() >>>>> is introduced: >>>> >>>> What do you intend to express with "is introduced"? Is there a >>>> problem now? >>>> Would there be a problem with subsequent changes? I'm entirely >>>> fine >>>> with >>>> adding that stub, but the description should make clear why /when >>>> exactly >>>> it's needed. >>> I mentioned that in the cover letter: >>> ``` >>> Also, after patch 3 ("xen/riscv: introduce setup_mm()") of this >>> patch series, >>> the linkage error mentioned in patch 1 ("xen/riscv: add stub for >>> share_xen_page_with_guest()") began to occur, so patch 1 >>> addresses >>> this issue. >>> ``` >>> I thought it would be the better then just mention in the commit >>> message that. >> >> Mentioning in the cover letter is fine, but each patch needs to also >> be self-contained. >> >>> Will it be fine to mention instead: >>> ``` >>> Introduction of setup memory management function will require >>> share_xen_page_with_guest() defined, at least, as a stub >>> otherwise >>> the following linkage error will occur... >>> ``` >> >> Quoting the linker error is imo of limited use. What such an >> explanation >> wants to say is why, all of the sudden, such an error occurs. After >> all >> you don't change anything directly related to common/trace.c. > if maddr_to_virt() is defined as: > static inline void *maddr_to_virt(paddr_t ma) > { > BUG_ON("unimplemented"); > return NULL; > // /* Offset in the direct map, accounting for pdx compression */ > // unsigned long va_offset = maddr_to_directmapoff(ma); > > // ASSERT(va_offset < DIRECTMAP_SIZE); > > // return (void *)(DIRECTMAP_VIRT_START + va_offset); > } > Then no stub for share_xen_page_with_privileged_guests() is needed but > it isn't clear at all why the definition of maddr_to_virt() affects > linkage of share_xen_page_with_privileged_guests(). > > I tried to look what is the difference after preprocessing stage for > common/trace.o and the only difference is in how maddr_to_virt() is > implemented: > 7574a7575,7577 > > do { if (__builtin_expect(!!("unimplemented"),0)) do { do { ({ > _Static_assert(!((30) >> ((31 - 24) + (31 - 24))), "!(" "(30) >> > (BUG_LINE_LO_WIDTH + BUG_LINE_HI_WIDTH)" ")"); }); ({ > _Static_assert(!((2) >= 4), "!(" "(2) >= BUGFRAME_NR" ")"); }); asm > volatile ( ".Lbug%=:""unimp""\n" " .pushsection > .bug_frames.%""""[bf_type], \"a\", %%progbits\n" " .p2align 2\n" > ".Lfrm%=:\n" " .long (.Lbug%= - .Lfrm%=) + %""""[bf_line_hi]\n" " > .long (%""""[bf_ptr] - .Lfrm%=) + %""""[bf_line_lo]\n" " .if " "0" > "\n" " .long 0, %""""[bf_msg] - .Lfrm%=\n" " .endif\n" " > .popsection\n" :: [bf_type] "i" (2), [bf_ptr] "i" > ("./arch/riscv/include/asm/mm.h"), [bf_msg] "i" (((void*)0)), > [bf_line_lo] "i" (((30) & ((1 << (31 - 24)) - 1)) << 24), > [bf_line_hi] "i" (((30) >> (31 - 24)) << 24) ); } while ( 0 ); > __builtin_unreachable(); } while ( 0 ); } while (0); > > return ((void*)0); > > > 7578d7580 > < unsigned long va_offset = (ma); > 7580d7581 > < do { if ( __builtin_expect(!!(!(va_offset < ((((vaddr_t)(509)) > << ((3 - 1) * (9) + 12)) - (((vaddr_t)(200)) << ((3 - 1) * (9) + > 12))))),0) ) do { do { ({ _Static_assert(!((35) >> ((31 - 24) + (31 > - 24))), "!(" "(35) >> (BUG_LINE_LO_WIDTH + BUG_LINE_HI_WIDTH)" > ")"); }); ({ _Static_assert(!((3) >= 4), "!(" "(3) >= BUGFRAME_NR" > ")"); }); asm volatile ( ".Lbug%=:""unimp""\n" " .pushsection > .bug_frames.%""""[bf_type], \"a\", %%progbits\n" " .p2align 2\n" > ".Lfrm%=:\n" " .long (.Lbug%= - .Lfrm%=) + %""""[bf_line_hi]\n" " > .long (%""""[bf_ptr] - .Lfrm%=) + %""""[bf_line_lo]\n" " .if " "1" > "\n" " .long 0, %""""[bf_msg] - .Lfrm%=\n" " .endif\n" " > .popsection\n" :: [bf_type] "i" (3), [bf_ptr] "i" > ("./arch/riscv/include/asm/mm.h"), [bf_msg] "i" ("va_offset < > DIRECTMAP_SIZE"), [bf_line_lo] "i" (((35) & ((1 << (31 - 24)) - 1)) > << 24), [bf_line_hi] "i" (((35) >> (31 - 24)) << 24) ); } while ( 0 > ); __builtin_unreachable(); } while ( 0 ); } while (0); > 7582d7582 > < return (void *)((((vaddr_t)(200)) << ((3 - 1) * (9) + 12)) + > va_offset); > > Could it be that DCE likely happen when maddr_to_virt() is defined as > stub and so code which call share_xen_page_with_privileged_guests() is > just eliminated? ( but I am not sure that I know fast way to check that > , do you have any pointers? ) Yes, I think DCE is the explanation here. And that's what (imo) wants saying in the description. Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |