On 05/03/2025 9:27 am, Jan Beulich wrote: > On 04.03.2025 00:29, Andrew Cooper wrote: >> --- a/xen/common/sched/core.c >> +++ b/xen/common/sched/core.c >> @@ -1534,12 +1534,19 @@ long vcpu_yield(void) >> >> static void cf_check domain_watchdog_timeout(void *data) >> { >> - struct domain *d = data; >> + /* >> + * The data parameter encodes the watchdog id in the low bits of >> + * the domain pointer. >> + */ >> + struct domain *d = _p((unsigned long)data & PAGE_MASK); >> + unsigned int id = (unsigned long)data & ~PAGE_MASK; >> + >> + BUILD_BUG_ON(!(alignof(d) < PAGE_SIZE)); > BUILD_BUG_ON(alignof(*d) < PAGE_SIZE); > >> @@ -1593,7 +1600,17 @@ void watchdog_domain_init(struct domain *d) >> d->watchdog_inuse_map = 0; >> >> for ( i = 0; i < NR_DOMAIN_WATCHDOG_TIMERS; i++ ) >> - init_timer(&d->watchdog_timer[i], domain_watchdog_timeout, d, 0); >> + { >> + void *data = d; >> + >> + BUILD_BUG_ON(NR_DOMAIN_WATCHDOG_TIMERS > alignof(d)); > BUILD_BUG_ON(NR_DOMAIN_WATCHDOG_TIMERS > alignof(*d));
Well, that's embarrassing. That explains why I was having issues, and I was clearly asleep when writing... ~Andrew