From patchwork Wed Oct 19 06:55:52 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Juha.Riihimaki@nokia.com X-Patchwork-Id: 120563 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [140.186.70.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id BE477B71BB for ; Wed, 19 Oct 2011 17:56:02 +1100 (EST) Received: from localhost ([::1]:36369 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RGQ4D-0007HY-Tf for incoming@patchwork.ozlabs.org; Wed, 19 Oct 2011 02:55:57 -0400 Received: from eggs.gnu.org ([140.186.70.92]:39337) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RGQ42-0007GY-Op for qemu-devel@nongnu.org; Wed, 19 Oct 2011 02:55:47 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1RGQ40-00081R-PK for qemu-devel@nongnu.org; Wed, 19 Oct 2011 02:55:46 -0400 Received: from smtp.nokia.com ([147.243.1.47]:60687 helo=mgw-sa01.nokia.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1RGQ40-0007zs-AA for qemu-devel@nongnu.org; Wed, 19 Oct 2011 02:55:44 -0400 Received: from Ziltoidia.research.nokia.com (esdhcp034185.research.nokia.com [172.21.34.185]) by mgw-sa01.nokia.com (Switch-3.4.4/Switch-3.4.3) with ESMTP id p9J6tdFo012495 for ; Wed, 19 Oct 2011 09:55:40 +0300 From: juha.riihimaki@nokia.com To: qemu-devel@nongnu.org Date: Wed, 19 Oct 2011 09:55:52 +0300 Message-Id: <1319007353-16041-2-git-send-email-juha.riihimaki@nokia.com> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: <1319007353-16041-1-git-send-email-juha.riihimaki@nokia.com> References: <1319007353-16041-1-git-send-email-juha.riihimaki@nokia.com> MIME-Version: 1.0 X-Nokia-AV: Clean X-MIME-Autoconverted: from 8bit to quoted-printable by mgw-sa01.nokia.com id p9J6tdFo012495 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.6 (newer, 1) X-Received-From: 147.243.1.47 Subject: [Qemu-devel] [PATCH 1/2] hw/nand: reject read-only drives X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Juha Riihimäki Signed-off-by: Juha Riihimäki --- 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) {