On Thu, Nov 21, 2024 at 10:46 AM Bjorn Helgaas <helgaas@xxxxxxxxxx> wrote: > > [+cc OF folks] > > On Thu, Nov 21, 2024 at 05:40:19PM +0800, Chen-Yu Tsai wrote: > > A PCI device normally does not have a device node, since the bus is > > fully enumerable. Assuming that a device node is presence is likely > > bad. > > > The newly added pwrctl code assumes such and crashes with a NULL > > pointer dereference. > > > Besides that, of_find_device_by_node(NULL) > > is likely going to return some random device. > > I thought this sounded implausible, but after looking at the code, I > think you're right, because bus_find_device() will use > device_match_of_node(), which decides the device matches if > "dev->of_node == np" (where "np" is NULL in this case). > > I'm sure many devices will have "dev->of_node == NULL", so it does > seem like of_find_device_by_node(NULL) will return the first one it > finds. > > This seems ... pretty janky and unexpected to me, but it's been this > way for years, so maybe it's safe? Cc'ing the OF folks just in case. This is a surprise to me, too. I think ACPI matching is broken in this way too. I'm sending out a fix. Rob