From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on sa.local.altlinux.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.1 Message-ID: <5af5c16d-525a-649b-5fc7-ba1faca9c9ad@basealt.ru> Date: Thu, 11 Jun 2026 14:11:10 +0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 Content-Language: en-US To: devel-kernel@lists.altlinux.org References: <'<20260610083910.23062-1-rauty@altlinux.org> <20260611104408.227113-1-rauty@altlinux.org> <7f0d3faa-8609-b404-0aa1-4f5f679556f3@basealt.ru> From: Vasiliy Kovalev In-Reply-To: <7f0d3faa-8609-b404-0aa1-4f5f679556f3@basealt.ru> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [d-kernel] [PATCH 3/2] wifi: mt76: mt7921: fix potential deadlock in mt7921_roc_abort_sync X-BeenThere: devel-kernel@lists.altlinux.org X-Mailman-Version: 2.1.12 Precedence: list Reply-To: ALT Linux kernel packages development List-Id: ALT Linux kernel packages development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2026 11:11:14 -0000 Archived-At: List-Archive: List-Post: On 6/11/26 14:07, Vasiliy Kovalev wrote: > Добрый день, > > On 6/11/26 13:44, Ajrat Makhmutov wrote: >> From: Sean Wang >> > > При бэкпортировании следует указывать хэш оригинального коммита из > mainline, например: > > commit d5059e52fd8bc624ec4255c9fa01a266513d126b upstream. > >> roc_abort_sync() can deadlock with roc_work(). roc_work() holds >> dev->mt76.mutex, while cancel_work_sync() waits for roc_work() >> to finish. If the caller already owns the same mutex, both >> sides block and no progress is possible. >> >> This deadlock can occur during station removal when >> mt76_sta_state() -> mt76_sta_remove() -> mt7921_mac_sta_remove() -> >> mt7921_roc_abort_sync() invokes cancel_work_sync() while >> roc_work() is still running and holding dev->mt76.mutex. >> >> This avoids the mutex deadlock and preserves exactly-once >> work ownership. >> >> Fixes: 352d966126e6 ("wifi: mt76: mt7921: fix a potential association >> failure upon resuming") >> Co-developed-by: Quan Zhou >> Signed-off-by: Quan Zhou >> Signed-off-by: Sean Wang >> Link: https://patch.msgid.link/20260126180013.8167-1-sean.wang@kernel.org >> Signed-off-by: Felix Fietkau >> (cherry picked from commit d5059e52fd8bc624ec4255c9fa01a266513d126b) > > cherry picked здесь не дает полезной информации, можно убрать > >> [ALT: keep del_timer_sync() instead of timer_delete_sync() — the >>   timer API rename is not present in 6.12.y. ] И подпись бэкпортера еще в конце сообщения > вместо "ALT" лучше указать бэкпортера "Ajrat" > >> --- >> Дополнение к ранее присланной серии из двух патчей. >> >> Саша Левин на ревью запроса в stable@ указал, что patch 2/2 (5ed54896, >> "fix a potential scan no APs") в одиночку вносит достижимый self-deadlock >> по dev->mt76.mutex: путь удаления станции идёт под этим mutex (его берёт >> ядровая mt76_sta_remove()), а добавленный там roc_abort_sync() делает >> cancel_work_sync() по roc_work(), который тоже хочет этот mutex. > > Саша Левин вроде как не против [1] принять серию из 3х патчей в stable > 6.12.y ветку, подготовьте исправленную версию и отправьте туда. > > [1] https://lore.kernel.org/all/20260610-stable-reply-0014@kernel.org/#t > >> Этот коммит (d5059e52) — обязательное лечение, применять вместе с 2/2. >> Таким образом серия теперь из трёх патчей. >> >>   drivers/net/wireless/mediatek/mt76/mt7921/main.c | 13 ++++++++----- >>   1 file changed, 8 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/main.c >> b/drivers/net/wireless/mediatek/mt76/mt7921/main.c >> index f2fffca868b51..99561094640f1 100644 >> --- a/drivers/net/wireless/mediatek/mt76/mt7921/main.c >> +++ b/drivers/net/wireless/mediatek/mt76/mt7921/main.c >> @@ -365,12 +365,15 @@ void mt7921_roc_abort_sync(struct mt792x_dev *dev) >>   { >>       struct mt792x_phy *phy = &dev->phy; >> >> +    if (!test_and_clear_bit(MT76_STATE_ROC, &phy->mt76->state)) >> +        return; >> + >>       del_timer_sync(&phy->roc_timer); >> -    cancel_work_sync(&phy->roc_work); >> -    if (test_and_clear_bit(MT76_STATE_ROC, &phy->mt76->state)) >> -        ieee80211_iterate_interfaces(mt76_hw(dev), >> -                         IEEE80211_IFACE_ITER_RESUME_ALL, >> -                         mt7921_roc_iter, (void *)phy); >> +    cancel_work(&phy->roc_work); >> + >> +    ieee80211_iterate_interfaces(mt76_hw(dev), >> +                     IEEE80211_IFACE_ITER_RESUME_ALL, >> +                     mt7921_roc_iter, (void *)phy); >>   } >>   EXPORT_SYMBOL_GPL(mt7921_roc_abort_sync); >> >> -- >> 2.50.1 >> _______________________________________________ >> devel-kernel mailing list >> devel-kernel@lists.altlinux.org >> https://lists.altlinux.org/mailman/listinfo/devel-kernel > -- Thanks, Vasiliy