Re: [BUG] wifi: rtw88: Hard system freeze on RTL8821CE when power_save is enabled (LPS/ASPM conflict)

From: LB F

Date: Mon Apr 27 2026 - 18:26:29 EST


Hi Bitterblue,

While looking through the driver code and my recent logs, I tried to
do a bit of amateur analysis. I noticed a small detail in the RX
validation path that I wanted to share, just as some food for thought
for the future.

In `rx.c:rtw_rx_query_rx_desc()`, if `pkt_stat->phy_status` is set,
the code calls `rtwdev->chip->ops->query_phy_status(...)` (which maps
to `rtw8821c.c:query_phy_status()` for my chip).

I saw that if the PHY status page is invalid (like the page 10 in my
previous log at 02:59), `query_phy_status()` prints the "unused phy
status page" warning and returns early. However, because it returns
`void`, it seems the caller (`rtw_rx_query_rx_desc`) just continues,
calls `rtw_rx_fill_rx_status`, and returns `0` (success).

To my untrained eye, it looks like this allows a frame with an invalid
PHY status page to still get passed up to mac80211.

I was wondering if it might make sense in the future to change the
`query_phy_status` callback to return an `int` (like `-EINVAL`), so
`rtw_rx_query_rx_desc` could drop these malformed frames before they
reach mac80211.

Of course, I might be completely misunderstanding the architecture
here! I also realize this would mean touching the `ops` struct for all
chipsets, which is a big change. Please treat this just as a humble
observation from a user. I leave it entirely to professionals like you
and Ping-Ke Shih to decide if something like this is actually needed
or correct.

As I mentioned before, the current patches are already doing a
fantastic job preventing the system freezes, and the laptop works
great.

Best regards,
Oleksandr Havrylov