[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 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? ) ~ Oleksii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |