From 9196d4134d2ee5f3cc7e9ed99061efd510d7a594 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 25 Apr 2011 10:42:29 -0700 Subject: [PATCH] .38 patches --- ...-dma-descriptor-rx-error-bit-parsing.patch | 84 +++++++++++++++++++ queue-2.6.38/series | 2 + ...ifs-fix-false-space-checking-failure.patch | 62 ++++++++++++++ 3 files changed, 148 insertions(+) create mode 100644 queue-2.6.38/ath9k_hw-partially-revert-fix-dma-descriptor-rx-error-bit-parsing.patch create mode 100644 queue-2.6.38/ubifs-fix-false-space-checking-failure.patch diff --git a/queue-2.6.38/ath9k_hw-partially-revert-fix-dma-descriptor-rx-error-bit-parsing.patch b/queue-2.6.38/ath9k_hw-partially-revert-fix-dma-descriptor-rx-error-bit-parsing.patch new file mode 100644 index 00000000000..dd1d5a39987 --- /dev/null +++ b/queue-2.6.38/ath9k_hw-partially-revert-fix-dma-descriptor-rx-error-bit-parsing.patch @@ -0,0 +1,84 @@ +From 115dad7a7f42e68840392767323ceb9306dbdb36 Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Fri, 14 Jan 2011 00:06:27 +0100 +Subject: ath9k_hw: partially revert "fix dma descriptor rx error bit parsing" + +From: Felix Fietkau + +commit 115dad7a7f42e68840392767323ceb9306dbdb36 upstream. + +The rx error bit parsing was changed to consider PHY errors and various +decryption errors separately. While correct according to the documentation, +this is causing spurious decryption error reports in some situations. + +Fix this by restoring the original order of the checks in those places, +where the errors are meant to be mutually exclusive. + +If a CRC error is reported, then MIC failure and decryption errors +are irrelevant, and a PHY error is unlikely. + +Signed-off-by: Felix Fietkau +Signed-off-by: John W. Linville +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/net/wireless/ath/ath9k/ar9003_mac.c | 8 ++++---- + drivers/net/wireless/ath/ath9k/mac.c | 14 ++++++++++---- + 2 files changed, 14 insertions(+), 8 deletions(-) + +--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c +@@ -615,7 +615,7 @@ int ath9k_hw_process_rxdesc_edma(struct + */ + if (rxsp->status11 & AR_CRCErr) + rxs->rs_status |= ATH9K_RXERR_CRC; +- if (rxsp->status11 & AR_PHYErr) { ++ else if (rxsp->status11 & AR_PHYErr) { + phyerr = MS(rxsp->status11, AR_PHYErrCode); + /* + * If we reach a point here where AR_PostDelimCRCErr is +@@ -638,11 +638,11 @@ int ath9k_hw_process_rxdesc_edma(struct + rxs->rs_phyerr = phyerr; + } + +- } +- if (rxsp->status11 & AR_DecryptCRCErr) ++ } else if (rxsp->status11 & AR_DecryptCRCErr) + rxs->rs_status |= ATH9K_RXERR_DECRYPT; +- if (rxsp->status11 & AR_MichaelErr) ++ else if (rxsp->status11 & AR_MichaelErr) + rxs->rs_status |= ATH9K_RXERR_MIC; ++ + if (rxsp->status11 & AR_KeyMiss) + rxs->rs_status |= ATH9K_RXERR_DECRYPT; + } +--- a/drivers/net/wireless/ath/ath9k/mac.c ++++ b/drivers/net/wireless/ath/ath9k/mac.c +@@ -690,17 +690,23 @@ int ath9k_hw_rxprocdesc(struct ath_hw *a + rs->rs_flags |= ATH9K_RX_DECRYPT_BUSY; + + if ((ads.ds_rxstatus8 & AR_RxFrameOK) == 0) { ++ /* ++ * Treat these errors as mutually exclusive to avoid spurious ++ * extra error reports from the hardware. If a CRC error is ++ * reported, then decryption and MIC errors are irrelevant, ++ * the frame is going to be dropped either way ++ */ + if (ads.ds_rxstatus8 & AR_CRCErr) + rs->rs_status |= ATH9K_RXERR_CRC; +- if (ads.ds_rxstatus8 & AR_PHYErr) { ++ else if (ads.ds_rxstatus8 & AR_PHYErr) { + rs->rs_status |= ATH9K_RXERR_PHY; + phyerr = MS(ads.ds_rxstatus8, AR_PHYErrCode); + rs->rs_phyerr = phyerr; +- } +- if (ads.ds_rxstatus8 & AR_DecryptCRCErr) ++ } else if (ads.ds_rxstatus8 & AR_DecryptCRCErr) + rs->rs_status |= ATH9K_RXERR_DECRYPT; +- if (ads.ds_rxstatus8 & AR_MichaelErr) ++ else if (ads.ds_rxstatus8 & AR_MichaelErr) + rs->rs_status |= ATH9K_RXERR_MIC; ++ + if (ads.ds_rxstatus8 & AR_KeyMiss) + rs->rs_status |= ATH9K_RXERR_DECRYPT; + } diff --git a/queue-2.6.38/series b/queue-2.6.38/series index abcdb5ec738..f92e50ed424 100644 --- a/queue-2.6.38/series +++ b/queue-2.6.38/series @@ -28,3 +28,5 @@ kconfig-avoid-buffer-underrun-in-choice-input.patch ubifs-fix-master-node-recovery.patch ideapad-read-brightness-setting-on-brightness-key-notify.patch acpi-battery-fribble-sysfs-files-from-a-resume-notifier.patch +ath9k_hw-partially-revert-fix-dma-descriptor-rx-error-bit-parsing.patch +ubifs-fix-false-space-checking-failure.patch diff --git a/queue-2.6.38/ubifs-fix-false-space-checking-failure.patch b/queue-2.6.38/ubifs-fix-false-space-checking-failure.patch new file mode 100644 index 00000000000..02dc58e5e05 --- /dev/null +++ b/queue-2.6.38/ubifs-fix-false-space-checking-failure.patch @@ -0,0 +1,62 @@ +From 8c230d9a5b5ec7970139acb7e2d165d7a3fe9f9e Mon Sep 17 00:00:00 2001 +From: Artem Bityutskiy +Date: Wed, 20 Apr 2011 18:02:45 +0300 +Subject: UBIFS: fix false space checking failure + +From: Artem Bityutskiy + +commit 8c230d9a5b5ec7970139acb7e2d165d7a3fe9f9e upstream. + +This patch fixes UBIFS mount failure when the debugging support is enabled, +we are recovering from a power cut, we were first mounter R/O and we are +re-mounting R/W. In this case we should not assume that the amount of free +space before we have re-mounted R/W and after are equivalent, because +when we have mounted R/O the file-system is in a non-committed state so +the amount of free space is slightly smaller, due to the fact that we cannot +predict the amount of free space precisely before we commit. + +This patch fixes the issue by skipping the debugging check in case of +recovery. This issue was reported by Caizhiyong +here: http://thread.gmane.org/gmane.linux.drivers.mtd/34350/focus=34387 + +Signed-off-by: Artem Bityutskiy +Reported-by: Caizhiyong +Signed-off-by: Greg Kroah-Hartman + +--- + fs/ubifs/super.c | 18 +++++++++++++++--- + 1 file changed, 15 insertions(+), 3 deletions(-) + +--- a/fs/ubifs/super.c ++++ b/fs/ubifs/super.c +@@ -1643,15 +1643,27 @@ static int ubifs_remount_rw(struct ubifs + if (err) + goto out; + ++ dbg_gen("re-mounted read-write"); ++ c->remounting_rw = 0; ++ + if (c->need_recovery) { + c->need_recovery = 0; + ubifs_msg("deferred recovery completed"); ++ } else { ++ /* ++ * Do not run the debugging space check if the were doing ++ * recovery, because when we saved the information we had the ++ * file-system in a state where the TNC and lprops has been ++ * modified in memory, but all the I/O operations (including a ++ * commit) were deferred. So the file-system was in ++ * "non-committed" state. Now the file-system is in committed ++ * state, and of course the amount of free space will change ++ * because, for example, the old index size was imprecise. ++ */ ++ err = dbg_check_space_info(c); + } + +- dbg_gen("re-mounted read-write"); +- c->remounting_rw = 0; + c->always_chk_crc = 0; +- err = dbg_check_space_info(c); + mutex_unlock(&c->umount_mutex); + return err; + -- 2.47.3