Re: [BUG] staging: rtl8192e: oops occurs when finding hardware rtl8192se

From: Philipp Hortmann
Date: Wed Apr 05 2023 - 17:19:33 EST


On 4/5/23 16:37, Greg Kroah-Hartman wrote:
On Sun, Apr 02, 2023 at 05:00:13PM +0200, Philipp Hortmann wrote:
Hi,

when I use the hardware rtl8192se the driver
drivers/staging/rtl8192e/rtl8192e/r8192e_pci.ko detects that it should not
run on this hardware and aborts.
But when the driver is freeing the resources an oops occures. Find oops at
the end of this Email.

When I comment out the following lines those errors disappear:
cancel_delayed_work_sync(&ieee->hw_wakeup_wq);
cancel_delayed_work_sync(&ieee->hw_sleep_wq);
cancel_work_sync(&ieee->ips_leave_wq);

When I do an init before the cancel:
INIT_DELAYED_WORK(&priv->rtllib->hw_wakeup_wq, (void *)rtl92e_hw_wakeup_wq);
The oops are gone as well.

When I use cancel_delayed_work() instead of cancel_delayed_work_sync() it
also works.

Can somebody give me a hint what the expected way is to solve this?

Is this a new thing, or has it always been there?
I would need to check in several places.
It seems to me that it was an issue in kernel 4.0 already.



Why is the driver loading if you don't have hardware for it? Or are you
manually loading it?
Reason why they two drivers are loaded is that realtek managed to have
two different devices with the same vid and did.

from rtl8192se/sw.c:
static const struct pci_device_id rtl92se_pci_ids[] = {
{RTL_PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8192, rtl92se_hal_cfg)},
...

from rtl8192e/rtl8192e/rtl_core.c
static struct pci_device_id rtl8192_pci_id_tbl[] = {
{RTL_PCI_DEVICE(0x10ec, 0x8192, rtl819xp_ops)},

#define PCI_VENDOR_ID_REALTEK 0x10ec

The drivers are loaded both and find out with the pci revision_id if they are in charge.


thanks,

greg k-h

May be I should mention that I do have an rtl8192se. But it does use a different device id.

I am simulating the driver that it is rtl8192se hardware by changing the revision_id.


Thanks for your response.

Bye Philipp