浏览代码

[MMC] Ensure correct mmc_priv() behaviour

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>
Russell King 19 年之前
父节点
当前提交
01357dcac6
共有 1 个文件被更改,包括 7 次插入1 次删除
  1. 7 1
      include/linux/mmc/host.h

+ 7 - 1
include/linux/mmc/host.h

@@ -109,6 +109,8 @@ struct mmc_host {
 	struct mmc_card		*card_selected;	/* the selected MMC card */
 	struct mmc_card		*card_selected;	/* the selected MMC card */
 
 
 	struct work_struct	detect;
 	struct work_struct	detect;
+
+	unsigned long		private[0] ____cacheline_aligned;
 };
 };
 
 
 extern struct mmc_host *mmc_alloc_host(int extra, struct device *);
 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_remove_host(struct mmc_host *);
 extern void mmc_free_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_dev(x)	((x)->dev)
 #define mmc_hostname(x)	((x)->class_dev.class_id)
 #define mmc_hostname(x)	((x)->class_dev.class_id)