[MMC] Ensure correct mmc_priv() behaviour
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Thu, 8 Sep 2005 21:46:00 +0000 (22:46 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 8 Sep 2005 21:46:00 +0000 (22:46 +0100)
mmc_priv() has some nasty effects if the wrong pointer type is
passed to it.  Introduce type checking, which also means we get
the right type.  Also add an additional member to mmc_host which
is used to align host-private data appropriately.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
include/linux/mmc/host.h

index c5d73c0cf6bb50d5c6da03b5b045a8952b077042..c1f021eddffa1663993d558a7c9dfb489e11e5fb 100644 (file)
@@ -109,6 +109,8 @@ struct mmc_host {
        struct mmc_card         *card_selected; /* the selected MMC card */
 
        struct work_struct      detect;
+
+       unsigned long           private[0] ____cacheline_aligned;
 };
 
 extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
@@ -116,7 +118,11 @@ extern int mmc_add_host(struct mmc_host *);
 extern void mmc_remove_host(struct mmc_host *);
 extern void mmc_free_host(struct mmc_host *);
 
-#define mmc_priv(x)    ((void *)((x) + 1))
+static inline void *mmc_priv(struct mmc_host *host)
+{
+       return (void *)host->private;
+}
+
 #define mmc_dev(x)     ((x)->dev)
 #define mmc_hostname(x)        ((x)->class_dev.class_id)