From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:54053) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RGs7k-0007ny-OQ for qemu-devel@nongnu.org; Thu, 20 Oct 2011 08:53:34 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RGs7e-0003jh-Rt for qemu-devel@nongnu.org; Thu, 20 Oct 2011 08:53:28 -0400 Received: from smtp.nokia.com ([147.243.128.24]:59238 helo=mgw-da01.nokia.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RGs7e-0003jQ-LP for qemu-devel@nongnu.org; Thu, 20 Oct 2011 08:53:22 -0400 Received: from Ziltoidia.research.nokia.com (esdhcp034185.research.nokia.com [172.21.34.185]) by mgw-da01.nokia.com (Switch-3.4.4/Switch-3.4.4) with ESMTP id p9KCrH7W001248 for ; Thu, 20 Oct 2011 15:53:18 +0300 From: juha.riihimaki@nokia.com Date: Thu, 20 Oct 2011 15:53:34 +0300 Message-Id: <1319115215-21224-2-git-send-email-juha.riihimaki@nokia.com> In-Reply-To: <1319115215-21224-1-git-send-email-juha.riihimaki@nokia.com> References: <1319115215-21224-1-git-send-email-juha.riihimaki@nokia.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v2 1/2] hw/nand: reject read-only drives List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org From: Juha Riihim=C3=A4ki also gracefully fail on nand_device_init() for unsupported block size instead of aborting. Signed-off-by: Juha Riihim=C3=A4ki --- hw/nand.c | 20 +++++++++++++------- 1 files changed, 13 insertions(+), 7 deletions(-) diff --git a/hw/nand.c b/hw/nand.c index c27783e..fad00d1 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" =20 # define NAND_CMD_READ0 0x00 # define NAND_CMD_READ1 0x01 @@ -384,18 +385,23 @@ 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; } =20 pagesize =3D 1 << s->oob_shift; s->mem_oob =3D 1; - if (s->bdrv && bdrv_getlength(s->bdrv) >=3D + 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) >=3D (s->pages << s->page_shift) + (s->pages << s->oob_shift)) { - pagesize =3D 0; - s->mem_oob =3D 0; - } - - if (!s->bdrv) { + pagesize =3D 0; + s->mem_oob =3D 0; + } + } else { pagesize +=3D 1 << s->page_shift; } if (pagesize) { --=20 1.7.5.4