[kernel] r14703 - in dists/trunk/linux-2.6/debian: . patches/features/all patches/series

Ben Hutchings benh at alioth.debian.org
Sun Nov 29 23:11:25 UTC 2009


Author: benh
Date: Sun Nov 29 23:11:23 2009
New Revision: 14703

Log:
Add 'removable' option to the mmc module.  (Closes: #504391)

Added:
   dists/trunk/linux-2.6/debian/patches/features/all/mmc-parameter-set-whether-cards-are-assumed-removable.patch
Modified:
   dists/trunk/linux-2.6/debian/changelog
   dists/trunk/linux-2.6/debian/patches/series/base

Modified: dists/trunk/linux-2.6/debian/changelog
==============================================================================
--- dists/trunk/linux-2.6/debian/changelog	Sun Nov 29 22:48:35 2009	(r14702)
+++ dists/trunk/linux-2.6/debian/changelog	Sun Nov 29 23:11:23 2009	(r14703)
@@ -23,6 +23,9 @@
     - TI wl12xx wireless drivers (wl1251_spi, wl1251_sdio and wl1271
       replace wl12xx)
     - Silicon Labs Si470x FM Radio Receiver driver (radio-usb-si470x)
+  * Add 'removable' option to the mmc module. Setting this to 0 causes
+    MMC/SD cards to be assumed non-removable, and filesystems on them
+    will remain mounted over a suspend/resume cycle. (Closes: #504391)
 
  -- Martin Michlmayr <tbm at cyrius.com>  Sun, 22 Nov 2009 13:56:12 +0000
 

Added: dists/trunk/linux-2.6/debian/patches/features/all/mmc-parameter-set-whether-cards-are-assumed-removable.patch
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ dists/trunk/linux-2.6/debian/patches/features/all/mmc-parameter-set-whether-cards-are-assumed-removable.patch	Sun Nov 29 23:11:23 2009	(r14703)
@@ -0,0 +1,190 @@
+Subject: mmc: add module parameter to set whether cards are assumed removable
+From: Ben Hutchings <ben at decadent.org.uk>
+
+Some people run general-purpose distribution kernels on netbooks with
+a card that is physically non-removable or logically non-removable
+(e.g. used for /home) and cannot be cleanly unmounted during suspend.
+Add a module parameter to set whether cards are assumed removable or
+non-removable, with the default set by CONFIG_MMC_UNSAFE_RESUME.
+
+In general, it is not possible to tell whether a card present in an MMC
+slot after resume is the same that was there before suspend.  So there are
+two possible behaviours, each of which will cause data loss in some cases:
+
+CONFIG_MMC_UNSAFE_RESUME=n (default): Cards are assumed to be removed
+during suspend.  Any filesystem on them must be unmounted before suspend;
+otherwise, buffered writes will be lost.
+
+CONFIG_MMC_UNSAFE_RESUME=y: Cards are assumed to remain present during
+suspend.  They must not be swapped during suspend; otherwise, buffered
+writes will be flushed to the wrong card.
+
+Currently the choice is made at compile time and this allows that to be
+overridden at module load time.
+
+Signed-off-by: Ben Hutchings <ben at decadent.org.uk>
+Cc: <linux-mmc at vger.kernel.org>
+Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
+---
+ drivers/mmc/core/Kconfig |    4 +++-
+ drivers/mmc/core/core.c  |   16 ++++++++++++++++
+ drivers/mmc/core/core.h  |    2 ++
+ drivers/mmc/core/mmc.c   |   23 +----------------------
+ drivers/mmc/core/sd.c    |   21 +--------------------
+ 5 files changed, 23 insertions(+), 43 deletions(-)
+
+diff --git a/drivers/mmc/core/Kconfig b/drivers/mmc/core/Kconfig
+index ab37a6d..bb22ffd 100644
+--- a/drivers/mmc/core/Kconfig
++++ b/drivers/mmc/core/Kconfig
+@@ -3,7 +3,7 @@
+ #
+ 
+ config MMC_UNSAFE_RESUME
+-	bool "Allow unsafe resume (DANGEROUS)"
++	bool "Assume MMC/SD cards are non-removable (DANGEROUS)"
+ 	help
+ 	  If you say Y here, the MMC layer will assume that all cards
+ 	  stayed in their respective slots during the suspend. The
+@@ -14,3 +14,5 @@ config MMC_UNSAFE_RESUME
+ 	  This option is usually just for embedded systems which use
+ 	  a MMC/SD card for rootfs. Most people should say N here.
+ 
++	  This option sets a default which can be overridden by the
++	  module parameter "removable=0" or "removable=1".
+diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
+index d98b0e2..010c964 100644
+--- a/drivers/mmc/core/core.c
++++ b/drivers/mmc/core/core.c
+@@ -48,6 +48,22 @@ int use_spi_crc = 1;
+ module_param(use_spi_crc, bool, 0);
+ 
+ /*
++ * We normally treat cards as removed during suspend if they are not
++ * known to be on a non-removable bus, to avoid the risk of writing
++ * back data to a different card after resume.  Allow this to be
++ * overridden if necessary.
++ */
++#ifdef CONFIG_MMC_UNSAFE_RESUME
++int mmc_assume_removable;
++#else
++int mmc_assume_removable = 1;
++#endif
++module_param_named(removable, mmc_assume_removable, bool, 0644);
++MODULE_PARM_DESC(
++	removable,
++	"MMC/SD cards are removable and may be removed during suspend");
++
++/*
+  * Internal function. Schedule delayed work in the MMC work queue.
+  */
+ static int mmc_schedule_delayed_work(struct delayed_work *work,
+diff --git a/drivers/mmc/core/core.h b/drivers/mmc/core/core.h
+index 1c68783..d20b7bc 100644
+--- a/drivers/mmc/core/core.h
++++ b/drivers/mmc/core/core.h
+@@ -64,7 +64,9 @@ int mmc_attach_mmc(struct mmc_host *host, u32 ocr);
+ int mmc_attach_sd(struct mmc_host *host, u32 ocr);
+ int mmc_attach_sdio(struct mmc_host *host, u32 ocr);
+ 
++/* Module parameters */
+ extern int use_spi_crc;
++extern int mmc_assume_removable;
+ 
+ /* Debugfs information for hosts and cards */
+ void mmc_add_host_debugfs(struct mmc_host *host);
+diff --git a/drivers/mmc/core/mmc.c b/drivers/mmc/core/mmc.c
+index bfefce3..c111894 100644
+--- a/drivers/mmc/core/mmc.c
++++ b/drivers/mmc/core/mmc.c
+@@ -602,25 +602,6 @@ static int mmc_awake(struct mmc_host *host)
+ 	return err;
+ }
+ 
+-#ifdef CONFIG_MMC_UNSAFE_RESUME
+-
+-static const struct mmc_bus_ops mmc_ops = {
+-	.awake = mmc_awake,
+-	.sleep = mmc_sleep,
+-	.remove = mmc_remove,
+-	.detect = mmc_detect,
+-	.suspend = mmc_suspend,
+-	.resume = mmc_resume,
+-	.power_restore = mmc_power_restore,
+-};
+-
+-static void mmc_attach_bus_ops(struct mmc_host *host)
+-{
+-	mmc_attach_bus(host, &mmc_ops);
+-}
+-
+-#else
+-
+ static const struct mmc_bus_ops mmc_ops = {
+ 	.awake = mmc_awake,
+ 	.sleep = mmc_sleep,
+@@ -645,15 +626,13 @@ static void mmc_attach_bus_ops(struct mmc_host *host)
+ {
+ 	const struct mmc_bus_ops *bus_ops;
+ 
+-	if (host->caps & MMC_CAP_NONREMOVABLE)
++	if (host->caps & MMC_CAP_NONREMOVABLE || !mmc_assume_removable)
+ 		bus_ops = &mmc_ops_unsafe;
+ 	else
+ 		bus_ops = &mmc_ops;
+ 	mmc_attach_bus(host, bus_ops);
+ }
+ 
+-#endif
+-
+ /*
+  * Starting point for MMC card init.
+  */
+diff --git a/drivers/mmc/core/sd.c b/drivers/mmc/core/sd.c
+index 10b2a4d..fdd414e 100644
+--- a/drivers/mmc/core/sd.c
++++ b/drivers/mmc/core/sd.c
+@@ -606,23 +606,6 @@ static void mmc_sd_power_restore(struct mmc_host *host)
+ 	mmc_release_host(host);
+ }
+ 
+-#ifdef CONFIG_MMC_UNSAFE_RESUME
+-
+-static const struct mmc_bus_ops mmc_sd_ops = {
+-	.remove = mmc_sd_remove,
+-	.detect = mmc_sd_detect,
+-	.suspend = mmc_sd_suspend,
+-	.resume = mmc_sd_resume,
+-	.power_restore = mmc_sd_power_restore,
+-};
+-
+-static void mmc_sd_attach_bus_ops(struct mmc_host *host)
+-{
+-	mmc_attach_bus(host, &mmc_sd_ops);
+-}
+-
+-#else
+-
+ static const struct mmc_bus_ops mmc_sd_ops = {
+ 	.remove = mmc_sd_remove,
+ 	.detect = mmc_sd_detect,
+@@ -643,15 +626,13 @@ static void mmc_sd_attach_bus_ops(struct mmc_host *host)
+ {
+ 	const struct mmc_bus_ops *bus_ops;
+ 
+-	if (host->caps & MMC_CAP_NONREMOVABLE)
++	if (host->caps & MMC_CAP_NONREMOVABLE || !mmc_assume_removable)
+ 		bus_ops = &mmc_sd_ops_unsafe;
+ 	else
+ 		bus_ops = &mmc_sd_ops;
+ 	mmc_attach_bus(host, bus_ops);
+ }
+ 
+-#endif
+-
+ /*
+  * Starting point for SD card init.
+  */
+-- 
+1.6.5.3
+

Modified: dists/trunk/linux-2.6/debian/patches/series/base
==============================================================================
--- dists/trunk/linux-2.6/debian/patches/series/base	Sun Nov 29 22:48:35 2009	(r14702)
+++ dists/trunk/linux-2.6/debian/patches/series/base	Sun Nov 29 23:11:23 2009	(r14703)
@@ -53,3 +53,4 @@
 + bugfix/mips/drm-ttm-build-fix.patch
 + bugfix/all/DocBook-media-copy-images-after-building-HTML.patch
 + bugfix/all/DocBook-media-create-links-for-included-sources.patch
++ features/all/mmc-parameter-set-whether-cards-are-assumed-removable.patch



More information about the Kernel-svn-changes mailing list