[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 1/2] hw/nand: reject read-only drives
From: |
juha . riihimaki |
Subject: |
[Qemu-devel] [PATCH 1/2] hw/nand: reject read-only drives |
Date: |
Wed, 19 Oct 2011 09:55:52 +0300 |
From: Juha Riihimäki <address@hidden>
Signed-off-by: Juha Riihimäki <address@hidden>
---
hw/nand.c | 23 +++++++++++++++--------
1 files changed, 15 insertions(+), 8 deletions(-)
diff --git a/hw/nand.c b/hw/nand.c
index c27783e..da6529d 100644
--- a/hw/nand.c
+++ b/hw/nand.c
@@ -19,6 +19,7 @@
# include "flash.h"
# include "blockdev.h"
# include "sysbus.h"
+#include "qemu-error.h"
# define NAND_CMD_READ0 0x00
# define NAND_CMD_READ1 0x01
@@ -384,18 +385,24 @@ static int nand_device_init(SysBusDevice *dev)
nand_init_2048(s);
break;
default:
- hw_error("%s: Unsupported NAND block size.\n", __func__);
+ error_report("Unsupported NAND block size");
+ return -1;
}
- pagesize = 1 << s->oob_shift;
s->mem_oob = 1;
- if (s->bdrv && bdrv_getlength(s->bdrv) >=
+ if (s->bdrv) {
+ if (bdrv_is_read_only(s->bdrv)) {
+ error_report("Can't use a read-only drive");
+ return -1;
+ }
+ if (bdrv_getlength(s->bdrv) >=
(s->pages << s->page_shift) + (s->pages << s->oob_shift)) {
- pagesize = 0;
- s->mem_oob = 0;
- }
-
- if (!s->bdrv) {
+ pagesize = 0;
+ s->mem_oob = 0;
+ } else {
+ pagesize = 1 << s->oob_shift;
+ }
+ } else {
pagesize += 1 << s->page_shift;
}
if (pagesize) {
--
1.7.5.4