--- x/sound/core/timer.c +++ y/sound/core/timer.c @@ -409,8 +409,9 @@ static void snd_timer_close_locked(struc struct snd_timer *timer = timeri->timer; if (timer) { - guard(spinlock)(&timer->lock); + spin_lock_irq(&timer->lock); timeri->flags |= SNDRV_TIMER_IFLG_DEAD; + spin_unlock_irq(&timer->lock); } if (!list_empty(&timeri->open_list)) { --- x/mm/page_alloc.c +++ y/mm/page_alloc.c @@ -4816,8 +4816,9 @@ static void *make_alloc_exact(unsigned l { if (addr) { unsigned long nr = DIV_ROUND_UP(size, PAGE_SIZE); + unsigned long pgs = (1UL << order); struct page *page = virt_to_page((void *)addr); - struct page *last = page + nr; + struct page *last = page + max(nr, pgs); split_page_owner(page, order, 0); split_page_memcg(page, order, 0);