From: Gabor Juhos Date: Sat, 22 Dec 2012 12:12:40 +0000 (+0000) Subject: ar71xx: ag71xx: don't start/stop built-in switch w/o mii_bus_dev X-Git-Tag: v19.07.0-rc1~22479 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=ad0f03d2503bdf9f8c50896915ddbb54d4ed2bd0;p=openwrt%2Fstaging%2Fhauke.git ar71xx: ag71xx: don't start/stop built-in switch w/o mii_bus_dev Trying to do that causes a NULL pointer dereference: CPU 0 Unable to handle kernel paging request at virtual address 00000000, epc == 801d170c, ra == 801d18d4 Oops[#1]: Cpu 0 $ 0 : 00000000 00000000 00000000 00000001 $ 4 : 00000000 802e6390 ffff8f45 00000001 $ 8 : 804b5360 ffffff80 802f93bc 00000000 $12 : 802f93e8 00000000 00000000 00000000 $16 : 8381aba0 8381aba0 00000000 00000000 $20 : 8295eff0 00000032 80000000 004101b8 $24 : 00000000 777265b0 $28 : 82936000 82937cf0 00420000 801d18d4 Hi : 00000000 Lo : 00000001 epc : 801d170c ar7240sw_reset+0x1c/0x19c Tainted: G O ra : 801d18d4 ag71xx_ar7240_start+0x28/0xc0 Status: 1100fc03 KERNEL EXL IE Cause : 00800008 BadVA : 00000000 PrId : 00019750 (MIPS 74Kc) Modules linked in: ath79_wdt ohci_hcd ledtrig_usbdev ledtrig_netdev nf_nat_irc nf_nat_ftp nf_conntrack_irc nf_conntrack_ftp ipt_MASQUERADE iptable_nat nf_nat pppoe xt_conntrack xt_CT xt_NOTRACK iptable_raw xt_state nf_conntrack_ipv4 nf_defrag_ipv4 nf_conntrack ehci_hcd pppox ipt_REJECT xt_TCPMSS xt_LOG xt_comment xt_multiport xt_mac xt_limit iptable_mangle iptable_filter ip_tables xt_tcpudp x_tab les ppp_async ppp_generic slhc ath9k(O) ath9k_common(O) ath9k_hw(O) ath(O) mac80211(O) usbcore usb_common nls_base crc_ccitt cfg80211(O) c ompat(O) arc4 aes_generic crypto_blkcipher cryptomgr aead crypto_hash crypto_algapi ledtrig_timer ledtrig_default_on leds_gpio gpio_button _hotplug(O) Process netifd (pid: 677, threadinfo=82936000, task=82cbe140, tls=77803750) Stack : ffffffff 80087900 00000001 82937d74 8381aba0 8381aba0 00000000 00000000 8295eff0 801d18d4 8295eff0 801fa4a4 00420000 80092158 00000002 8381aba0 8381a800 00000000 00000080 801cf900 8027e720 00000000 00000000 8009223c 8381a800 8381a82c 8027e720 00000000 00000000 7f9d14f0 00420000 801ec08c 8381a800 801ebfb0 33000000 82937e30 00000001 8381a800 00001003 801ec348 ... Call Trace: [<801d170c>] ar7240sw_reset+0x1c/0x19c [<801d18d4>] ag71xx_ar7240_start+0x28/0xc0 [<801cf900>] ag71xx_open+0x1d0/0x258 [<801ec08c>] __dev_open+0xcc/0x130 [<801ec348>] __dev_change_flags+0xc0/0x160 [<801ec490>] dev_change_flags+0x20/0x6c [<801ec5c8>] dev_ifsioc+0xec/0x348 [<801ecdb8>] dev_ioctl+0x594/0x67c [<800ec00c>] do_vfs_ioctl+0x598/0x5ec [<800ec0b0>] sys_ioctl+0x50/0x90 [<8006a3c4>] stack_done+0x20/0x40 Code: afbf0024 afb40020 afb10014 <8c910000> 00809021 24100104 24130704 8e440000 02002821 Signed-off-by: Gabor Juhos SVN-Revision: 34848 --- diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_phy.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_phy.c index ebdbc5b9ac..ce9edc1f74 100644 --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_phy.c +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_phy.c @@ -48,7 +48,7 @@ void ag71xx_phy_start(struct ag71xx *ag) if (ag->phy_dev) { phy_start(ag->phy_dev); - } else if (pdata->switch_data) { + } else if (pdata->mii_bus_dev && pdata->switch_data) { ag71xx_ar7240_start(ag); } else { ag->link = 1; @@ -63,7 +63,7 @@ void ag71xx_phy_stop(struct ag71xx *ag) if (ag->phy_dev) phy_stop(ag->phy_dev); - else if (pdata->switch_data) + else if (pdata->mii_bus_dev && pdata->switch_data) ag71xx_ar7240_stop(ag); spin_lock_irqsave(&ag->lock, flags);