aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2011-12-23 11:03:17 -0500
committerDavid Woodhouse <David.Woodhouse@intel.com>2012-01-09 13:25:22 -0500
commit7ae79d7ff1769a3e9c47076b46e4eaa11204a2ee (patch)
tree34c084261dd52d4f015f2399405824b9fcebda6f /include
parenteda95cbf75193808f62948fb0142ba0901d8bee2 (diff)
mtd: introduce mtd_panic_write interface
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/mtd/mtd.h25
1 files changed, 15 insertions, 10 deletions
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index 1da7f4a6ef88..2fb83cd3d264 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -186,6 +186,8 @@ struct mtd_info {
186 size_t *retlen, u_char *buf); 186 size_t *retlen, u_char *buf);
187 int (*write) (struct mtd_info *mtd, loff_t to, size_t len, 187 int (*write) (struct mtd_info *mtd, loff_t to, size_t len,
188 size_t *retlen, const u_char *buf); 188 size_t *retlen, const u_char *buf);
189 int (*panic_write) (struct mtd_info *mtd, loff_t to, size_t len,
190 size_t *retlen, const u_char *buf);
189 191
190 /* Backing device capabilities for this device 192 /* Backing device capabilities for this device
191 * - provides mmap capabilities 193 * - provides mmap capabilities
@@ -193,16 +195,6 @@ struct mtd_info {
193 struct backing_dev_info *backing_dev_info; 195 struct backing_dev_info *backing_dev_info;
194 196
195 197
196
197 /* In blackbox flight recorder like scenarios we want to make successful
198 writes in interrupt context. panic_write() is only intended to be
199 called when its known the kernel is about to panic and we need the
200 write to succeed. Since the kernel is not going to be running for much
201 longer, this function can break locks and delay to ensure the write
202 succeeds (but not sleep). */
203
204 int (*panic_write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
205
206 int (*read_oob) (struct mtd_info *mtd, loff_t from, 198 int (*read_oob) (struct mtd_info *mtd, loff_t from,
207 struct mtd_oob_ops *ops); 199 struct mtd_oob_ops *ops);
208 int (*write_oob) (struct mtd_info *mtd, loff_t to, 200 int (*write_oob) (struct mtd_info *mtd, loff_t to,
@@ -315,6 +307,19 @@ static inline int mtd_write(struct mtd_info *mtd, loff_t to, size_t len,
315 return mtd->write(mtd, to, len, retlen, buf); 307 return mtd->write(mtd, to, len, retlen, buf);
316} 308}
317 309
310/*
311 * In blackbox flight recorder like scenarios we want to make successful writes
312 * in interrupt context. panic_write() is only intended to be called when its
313 * known the kernel is about to panic and we need the write to succeed. Since
314 * the kernel is not going to be running for much longer, this function can
315 * break locks and delay to ensure the write succeeds (but not sleep).
316 */
317static inline int mtd_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
318 size_t *retlen, const u_char *buf)
319{
320 return mtd->panic_write(mtd, to, len, retlen, buf);
321}
322
318static inline struct mtd_info *dev_to_mtd(struct device *dev) 323static inline struct mtd_info *dev_to_mtd(struct device *dev)
319{ 324{
320 return dev ? dev_get_drvdata(dev) : NULL; 325 return dev ? dev_get_drvdata(dev) : NULL;