diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-12-06 10:37:11 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-12-06 10:37:11 -0500 |
commit | f1c488a78d9f1a22cdb15648c15e70fd82ed229a (patch) | |
tree | 6d83a51a52cf012a77c3f7b82b020a2374beb917 | |
parent | f30d0a815bb9b8ac1a3ab4d0c333d2379220d91d (diff) |
Revert "ath: ath9k: use debugfs_create_devm_seqfile() helper for seq_file entries"
This reverts commit d32394fae95741d733b174ec1446f27765f80233.
It has been reported to cause problems, Jeremiah writes:
On an Acer C720 laptop if a suspend is performed the screen
freezes, the machine locks up, and according to the indicator
lights it does not enter suspend. A hard reset is required to
get it running again.
Reported-by: Jeremiah Mahler <jmmahler@gmail.com>
Cc: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ahb.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/debug.c | 122 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/pci.c | 1 |
3 files changed, 100 insertions, 24 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ahb.c b/drivers/net/wireless/ath/ath9k/ahb.c index 750a13045458..e000c4c27881 100644 --- a/drivers/net/wireless/ath/ath9k/ahb.c +++ b/drivers/net/wireless/ath/ath9k/ahb.c | |||
@@ -126,7 +126,6 @@ static int ath_ahb_probe(struct platform_device *pdev) | |||
126 | sc = hw->priv; | 126 | sc = hw->priv; |
127 | sc->hw = hw; | 127 | sc->hw = hw; |
128 | sc->dev = &pdev->dev; | 128 | sc->dev = &pdev->dev; |
129 | dev_set_drvdata(sc->dev, sc); | ||
130 | sc->mem = mem; | 129 | sc->mem = mem; |
131 | sc->irq = irq; | 130 | sc->irq = irq; |
132 | 131 | ||
diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c index a1f1614a05c2..e7b709f03b29 100644 --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c | |||
@@ -403,7 +403,7 @@ static const struct file_operations fops_antenna_diversity = { | |||
403 | 403 | ||
404 | static int read_file_dma(struct seq_file *file, void *data) | 404 | static int read_file_dma(struct seq_file *file, void *data) |
405 | { | 405 | { |
406 | struct ath_softc *sc = dev_get_drvdata(file->private); | 406 | struct ath_softc *sc = file->private; |
407 | struct ath_hw *ah = sc->sc_ah; | 407 | struct ath_hw *ah = sc->sc_ah; |
408 | u32 val[ATH9K_NUM_DMA_DEBUG_REGS]; | 408 | u32 val[ATH9K_NUM_DMA_DEBUG_REGS]; |
409 | int i, qcuOffset = 0, dcuOffset = 0; | 409 | int i, qcuOffset = 0, dcuOffset = 0; |
@@ -470,6 +470,20 @@ static int read_file_dma(struct seq_file *file, void *data) | |||
470 | return 0; | 470 | return 0; |
471 | } | 471 | } |
472 | 472 | ||
473 | static int open_file_dma(struct inode *inode, struct file *f) | ||
474 | { | ||
475 | return single_open(f, read_file_dma, inode->i_private); | ||
476 | } | ||
477 | |||
478 | static const struct file_operations fops_dma = { | ||
479 | .open = open_file_dma, | ||
480 | .read = seq_read, | ||
481 | .owner = THIS_MODULE, | ||
482 | .llseek = seq_lseek, | ||
483 | .release = single_release, | ||
484 | }; | ||
485 | |||
486 | |||
473 | void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status) | 487 | void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status) |
474 | { | 488 | { |
475 | if (status) | 489 | if (status) |
@@ -525,7 +539,7 @@ void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status) | |||
525 | 539 | ||
526 | static int read_file_interrupt(struct seq_file *file, void *data) | 540 | static int read_file_interrupt(struct seq_file *file, void *data) |
527 | { | 541 | { |
528 | struct ath_softc *sc = dev_get_drvdata(file->private); | 542 | struct ath_softc *sc = file->private; |
529 | 543 | ||
530 | #define PR_IS(a, s) \ | 544 | #define PR_IS(a, s) \ |
531 | do { \ | 545 | do { \ |
@@ -586,9 +600,22 @@ static int read_file_interrupt(struct seq_file *file, void *data) | |||
586 | return 0; | 600 | return 0; |
587 | } | 601 | } |
588 | 602 | ||
603 | static int open_file_interrupt(struct inode *inode, struct file *f) | ||
604 | { | ||
605 | return single_open(f, read_file_interrupt, inode->i_private); | ||
606 | } | ||
607 | |||
608 | static const struct file_operations fops_interrupt = { | ||
609 | .read = seq_read, | ||
610 | .open = open_file_interrupt, | ||
611 | .owner = THIS_MODULE, | ||
612 | .llseek = seq_lseek, | ||
613 | .release = single_release, | ||
614 | }; | ||
615 | |||
589 | static int read_file_xmit(struct seq_file *file, void *data) | 616 | static int read_file_xmit(struct seq_file *file, void *data) |
590 | { | 617 | { |
591 | struct ath_softc *sc = dev_get_drvdata(file->private); | 618 | struct ath_softc *sc = file->private; |
592 | 619 | ||
593 | seq_printf(file, "%30s %10s%10s%10s\n\n", "BE", "BK", "VI", "VO"); | 620 | seq_printf(file, "%30s %10s%10s%10s\n\n", "BE", "BK", "VI", "VO"); |
594 | 621 | ||
@@ -634,7 +661,7 @@ static void print_queue(struct ath_softc *sc, struct ath_txq *txq, | |||
634 | 661 | ||
635 | static int read_file_queues(struct seq_file *file, void *data) | 662 | static int read_file_queues(struct seq_file *file, void *data) |
636 | { | 663 | { |
637 | struct ath_softc *sc = dev_get_drvdata(file->private); | 664 | struct ath_softc *sc = file->private; |
638 | struct ath_txq *txq; | 665 | struct ath_txq *txq; |
639 | int i; | 666 | int i; |
640 | static const char *qname[4] = { | 667 | static const char *qname[4] = { |
@@ -655,7 +682,7 @@ static int read_file_queues(struct seq_file *file, void *data) | |||
655 | 682 | ||
656 | static int read_file_misc(struct seq_file *file, void *data) | 683 | static int read_file_misc(struct seq_file *file, void *data) |
657 | { | 684 | { |
658 | struct ath_softc *sc = dev_get_drvdata(file->private); | 685 | struct ath_softc *sc = file->private; |
659 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); | 686 | struct ath_common *common = ath9k_hw_common(sc->sc_ah); |
660 | struct ath9k_vif_iter_data iter_data; | 687 | struct ath9k_vif_iter_data iter_data; |
661 | struct ath_chanctx *ctx; | 688 | struct ath_chanctx *ctx; |
@@ -745,7 +772,7 @@ static int read_file_misc(struct seq_file *file, void *data) | |||
745 | 772 | ||
746 | static int read_file_reset(struct seq_file *file, void *data) | 773 | static int read_file_reset(struct seq_file *file, void *data) |
747 | { | 774 | { |
748 | struct ath_softc *sc = dev_get_drvdata(file->private); | 775 | struct ath_softc *sc = file->private; |
749 | 776 | ||
750 | seq_printf(file, "%17s: %2d\n", "Baseband Hang", | 777 | seq_printf(file, "%17s: %2d\n", "Baseband Hang", |
751 | sc->debug.stats.reset[RESET_TYPE_BB_HANG]); | 778 | sc->debug.stats.reset[RESET_TYPE_BB_HANG]); |
@@ -806,6 +833,58 @@ void ath_debug_stat_tx(struct ath_softc *sc, struct ath_buf *bf, | |||
806 | TX_STAT_INC(qnum, delim_underrun); | 833 | TX_STAT_INC(qnum, delim_underrun); |
807 | } | 834 | } |
808 | 835 | ||
836 | static int open_file_xmit(struct inode *inode, struct file *f) | ||
837 | { | ||
838 | return single_open(f, read_file_xmit, inode->i_private); | ||
839 | } | ||
840 | |||
841 | static const struct file_operations fops_xmit = { | ||
842 | .read = seq_read, | ||
843 | .open = open_file_xmit, | ||
844 | .owner = THIS_MODULE, | ||
845 | .llseek = seq_lseek, | ||
846 | .release = single_release, | ||
847 | }; | ||
848 | |||
849 | static int open_file_queues(struct inode *inode, struct file *f) | ||
850 | { | ||
851 | return single_open(f, read_file_queues, inode->i_private); | ||
852 | } | ||
853 | |||
854 | static const struct file_operations fops_queues = { | ||
855 | .read = seq_read, | ||
856 | .open = open_file_queues, | ||
857 | .owner = THIS_MODULE, | ||
858 | .llseek = seq_lseek, | ||
859 | .release = single_release, | ||
860 | }; | ||
861 | |||
862 | static int open_file_misc(struct inode *inode, struct file *f) | ||
863 | { | ||
864 | return single_open(f, read_file_misc, inode->i_private); | ||
865 | } | ||
866 | |||
867 | static const struct file_operations fops_misc = { | ||
868 | .read = seq_read, | ||
869 | .open = open_file_misc, | ||
870 | .owner = THIS_MODULE, | ||
871 | .llseek = seq_lseek, | ||
872 | .release = single_release, | ||
873 | }; | ||
874 | |||
875 | static int open_file_reset(struct inode *inode, struct file *f) | ||
876 | { | ||
877 | return single_open(f, read_file_reset, inode->i_private); | ||
878 | } | ||
879 | |||
880 | static const struct file_operations fops_reset = { | ||
881 | .read = seq_read, | ||
882 | .open = open_file_reset, | ||
883 | .owner = THIS_MODULE, | ||
884 | .llseek = seq_lseek, | ||
885 | .release = single_release, | ||
886 | }; | ||
887 | |||
809 | void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs) | 888 | void ath_debug_stat_rx(struct ath_softc *sc, struct ath_rx_status *rs) |
810 | { | 889 | { |
811 | ath9k_cmn_debug_stat_rx(&sc->debug.stats.rxstats, rs); | 890 | ath9k_cmn_debug_stat_rx(&sc->debug.stats.rxstats, rs); |
@@ -935,7 +1014,7 @@ static const struct file_operations fops_regdump = { | |||
935 | 1014 | ||
936 | static int read_file_dump_nfcal(struct seq_file *file, void *data) | 1015 | static int read_file_dump_nfcal(struct seq_file *file, void *data) |
937 | { | 1016 | { |
938 | struct ath_softc *sc = dev_get_drvdata(file->private); | 1017 | struct ath_softc *sc = file->private; |
939 | struct ath_hw *ah = sc->sc_ah; | 1018 | struct ath_hw *ah = sc->sc_ah; |
940 | struct ath9k_nfcal_hist *h = sc->cur_chan->caldata.nfCalHist; | 1019 | struct ath9k_nfcal_hist *h = sc->cur_chan->caldata.nfCalHist; |
941 | struct ath_common *common = ath9k_hw_common(ah); | 1020 | struct ath_common *common = ath9k_hw_common(ah); |
@@ -1177,14 +1256,14 @@ int ath9k_init_debug(struct ath_hw *ah) | |||
1177 | ath9k_tx99_init_debug(sc); | 1256 | ath9k_tx99_init_debug(sc); |
1178 | ath9k_spectral_init_debug(sc); | 1257 | ath9k_spectral_init_debug(sc); |
1179 | 1258 | ||
1180 | debugfs_create_devm_seqfile(sc->dev, "dma", sc->debug.debugfs_phy, | 1259 | debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc, |
1181 | read_file_dma); | 1260 | &fops_dma); |
1182 | debugfs_create_devm_seqfile(sc->dev, "interrupt", sc->debug.debugfs_phy, | 1261 | debugfs_create_file("interrupt", S_IRUSR, sc->debug.debugfs_phy, sc, |
1183 | read_file_interrupt); | 1262 | &fops_interrupt); |
1184 | debugfs_create_devm_seqfile(sc->dev, "xmit", sc->debug.debugfs_phy, | 1263 | debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc, |
1185 | read_file_xmit); | 1264 | &fops_xmit); |
1186 | debugfs_create_devm_seqfile(sc->dev, "queues", sc->debug.debugfs_phy, | 1265 | debugfs_create_file("queues", S_IRUSR, sc->debug.debugfs_phy, sc, |
1187 | read_file_queues); | 1266 | &fops_queues); |
1188 | debugfs_create_u32("qlen_bk", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, | 1267 | debugfs_create_u32("qlen_bk", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, |
1189 | &sc->tx.txq_max_pending[IEEE80211_AC_BK]); | 1268 | &sc->tx.txq_max_pending[IEEE80211_AC_BK]); |
1190 | debugfs_create_u32("qlen_be", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, | 1269 | debugfs_create_u32("qlen_be", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, |
@@ -1193,10 +1272,10 @@ int ath9k_init_debug(struct ath_hw *ah) | |||
1193 | &sc->tx.txq_max_pending[IEEE80211_AC_VI]); | 1272 | &sc->tx.txq_max_pending[IEEE80211_AC_VI]); |
1194 | debugfs_create_u32("qlen_vo", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, | 1273 | debugfs_create_u32("qlen_vo", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, |
1195 | &sc->tx.txq_max_pending[IEEE80211_AC_VO]); | 1274 | &sc->tx.txq_max_pending[IEEE80211_AC_VO]); |
1196 | debugfs_create_devm_seqfile(sc->dev, "misc", sc->debug.debugfs_phy, | 1275 | debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy, sc, |
1197 | read_file_misc); | 1276 | &fops_misc); |
1198 | debugfs_create_devm_seqfile(sc->dev, "reset", sc->debug.debugfs_phy, | 1277 | debugfs_create_file("reset", S_IRUSR, sc->debug.debugfs_phy, sc, |
1199 | read_file_reset); | 1278 | &fops_reset); |
1200 | 1279 | ||
1201 | ath9k_cmn_debug_recv(sc->debug.debugfs_phy, &sc->debug.stats.rxstats); | 1280 | ath9k_cmn_debug_recv(sc->debug.debugfs_phy, &sc->debug.stats.rxstats); |
1202 | ath9k_cmn_debug_phy_err(sc->debug.debugfs_phy, &sc->debug.stats.rxstats); | 1281 | ath9k_cmn_debug_phy_err(sc->debug.debugfs_phy, &sc->debug.stats.rxstats); |
@@ -1218,9 +1297,8 @@ int ath9k_init_debug(struct ath_hw *ah) | |||
1218 | &ah->config.cwm_ignore_extcca); | 1297 | &ah->config.cwm_ignore_extcca); |
1219 | debugfs_create_file("regdump", S_IRUSR, sc->debug.debugfs_phy, sc, | 1298 | debugfs_create_file("regdump", S_IRUSR, sc->debug.debugfs_phy, sc, |
1220 | &fops_regdump); | 1299 | &fops_regdump); |
1221 | debugfs_create_devm_seqfile(sc->dev, "dump_nfcal", | 1300 | debugfs_create_file("dump_nfcal", S_IRUSR, sc->debug.debugfs_phy, sc, |
1222 | sc->debug.debugfs_phy, | 1301 | &fops_dump_nfcal); |
1223 | read_file_dump_nfcal); | ||
1224 | 1302 | ||
1225 | ath9k_cmn_debug_base_eeprom(sc->debug.debugfs_phy, sc->sc_ah); | 1303 | ath9k_cmn_debug_base_eeprom(sc->debug.debugfs_phy, sc->sc_ah); |
1226 | ath9k_cmn_debug_modal_eeprom(sc->debug.debugfs_phy, sc->sc_ah); | 1304 | ath9k_cmn_debug_modal_eeprom(sc->debug.debugfs_phy, sc->sc_ah); |
diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c index 90c9e3cbf958..c018dea0b2e8 100644 --- a/drivers/net/wireless/ath/ath9k/pci.c +++ b/drivers/net/wireless/ath/ath9k/pci.c | |||
@@ -856,7 +856,6 @@ static int ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
856 | sc = hw->priv; | 856 | sc = hw->priv; |
857 | sc->hw = hw; | 857 | sc->hw = hw; |
858 | sc->dev = &pdev->dev; | 858 | sc->dev = &pdev->dev; |
859 | dev_set_drvdata(sc->dev, sc); | ||
860 | sc->mem = pcim_iomap_table(pdev)[0]; | 859 | sc->mem = pcim_iomap_table(pdev)[0]; |
861 | sc->driver_data = id->driver_data; | 860 | sc->driver_data = id->driver_data; |
862 | 861 | ||