From patchwork Mon Sep 3 13:00:01 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Akinobu Mita X-Patchwork-Id: 181358 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from merlin.infradead.org (unknown [IPv6:2001:4978:20e::2]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id C0DB32C007C for ; Mon, 3 Sep 2012 23:01:55 +1000 (EST) Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.76 #1 (Red Hat Linux)) id 1T8WHF-0007bk-HJ; Mon, 03 Sep 2012 13:01:19 +0000 Received: from mail-pb0-f49.google.com ([209.85.160.49]) by merlin.infradead.org with esmtps (Exim 4.76 #1 (Red Hat Linux)) id 1T8WGV-0007EJ-Kh for linux-mtd@lists.infradead.org; Mon, 03 Sep 2012 13:00:33 +0000 Received: by mail-pb0-f49.google.com with SMTP id rq8so8483440pbb.36 for ; Mon, 03 Sep 2012 06:00:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; bh=aJ+NaJ6J0FUVtDiWrKTfflr8JelJXDGmCRU0FHalIkw=; b=UWSxrc6m3cmtHEztOfEENgpGHcxipiA/UbkCn5e9RUM1snIwJmQMeGhef1E75bZ2bV G9XlyHKh/A1fmJ5O+y0YRqaNaUCJmXiVfWy3xjv0Ldt36PgNsGPnX4OChm5G8kmvi+kG WXGygKTspxgd2TKn/Ojuyc6t0Mc6T67/3r3FIXiB9Z2hWnhCTah8VODwGz44opefCnLn NPNwOVDwxKgO6YsNHnsaOsFp4Mu9FW4xKkVSycUVpa558vK/NtVdduvyyGMsHDuv0jeW 7VEOppYomgxRTHK3GnAiNbt+zvFuI9r9sqKSVg7Cral7RTD54mFWnW7Bg3tolsHp9Dtb xk+g== Received: by 10.68.239.164 with SMTP id vt4mr38333708pbc.118.1346677231303; Mon, 03 Sep 2012 06:00:31 -0700 (PDT) Received: from localhost.localdomain (p4038-ipngn701hodogaya.kanagawa.ocn.ne.jp. [114.158.195.38]) by mx.google.com with ESMTPS id uu6sm9884078pbc.70.2012.09.03.06.00.30 (version=TLSv1/SSLv3 cipher=OTHER); Mon, 03 Sep 2012 06:00:30 -0700 (PDT) From: Akinobu Mita To: linux-mtd@lists.infradead.org Subject: [PATCH v3 06/11] mtd: mtd_nandecctest: ensure alignment requirement for bitops Date: Mon, 3 Sep 2012 22:00:01 +0900 Message-Id: <1346677206-13621-7-git-send-email-akinobu.mita@gmail.com> X-Mailer: git-send-email 1.7.11.4 In-Reply-To: <1346677206-13621-1-git-send-email-akinobu.mita@gmail.com> References: <1346677206-13621-1-git-send-email-akinobu.mita@gmail.com> X-Spam-Note: CRM114 invocation failed X-Spam-Score: -2.7 (--) X-Spam-Report: SpamAssassin version 3.3.2 on merlin.infradead.org summary: Content analysis details: (-2.7 points) pts rule name description ---- ---------------------- -------------------------------------------------- -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at http://www.dnswl.org/, low trust [209.85.160.49 listed in list.dnswl.org] 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (akinobu.mita[at]gmail.com) -0.0 SPF_PASS SPF: sender matches SPF record -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature Cc: Artem Bityutskiy , David Woodhouse , Akinobu Mita X-BeenThere: linux-mtd@lists.infradead.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: linux-mtd-bounces@lists.infradead.org Errors-To: linux-mtd-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org Currently the data blocks which is used to test single bit error correction is allocated statically and injecting single bit error is implemented by using __change_bit() which must operate on the memory aligned to the size of an "unsigned long". But there is no such guarantee for statically allocated array. This fix the issue by allocating the data block dynamically by kmalloc(). It also allocate the ecc code dynamically instead of allocating statically on stack. The reason to allocate the ecc code dynamically is that later change will add tests which inject bit errors into the ecc code by bitops. Signed-off-by: Akinobu Mita Cc: David Woodhouse Cc: linux-mtd@lists.infradead.org Cc: Artem Bityutskiy --- drivers/mtd/tests/mtd_nandecctest.c | 43 +++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/drivers/mtd/tests/mtd_nandecctest.c b/drivers/mtd/tests/mtd_nandecctest.c index 2b2d1a9..d3e8873 100644 --- a/drivers/mtd/tests/mtd_nandecctest.c +++ b/drivers/mtd/tests/mtd_nandecctest.c @@ -4,6 +4,7 @@ #include #include #include +#include #include #if defined(CONFIG_MTD_NAND) || defined(CONFIG_MTD_NAND_MODULE) @@ -31,16 +32,24 @@ static void dump_data_ecc(void *error_data, void *error_ecc, void *correct_data, DUMP_PREFIX_NONE, 16, 1, correct_ecc, 3, false); } -static unsigned char correct_data[512]; -static unsigned char error_data[512]; - static int nand_ecc_test(const size_t size) { - unsigned char correct_ecc[3]; - unsigned char error_ecc[3]; + int err = 0; + void *error_data; + void *error_ecc; + void *correct_data; + void *correct_ecc; char testname[30]; - BUG_ON(sizeof(correct_data) < size); + error_data = kmalloc(size, GFP_KERNEL); + error_ecc = kmalloc(3, GFP_KERNEL); + correct_data = kmalloc(size, GFP_KERNEL); + correct_ecc = kmalloc(3, GFP_KERNEL); + + if (!error_data || !error_ecc || !correct_data || !correct_ecc) { + err = -ENOMEM; + goto error; + } sprintf(testname, "nand-ecc-%zu", size); @@ -53,15 +62,21 @@ static int nand_ecc_test(const size_t size) __nand_calculate_ecc(error_data, size, error_ecc); __nand_correct_data(error_data, correct_ecc, error_ecc, size); - if (!memcmp(correct_data, error_data, size)) { - pr_info("mtd_nandecctest: ok - %s\n", testname); - return 0; + if (memcmp(correct_data, error_data, size)) { + pr_err("mtd_nandecctest: not ok - %s\n", testname); + dump_data_ecc(error_data, error_ecc, correct_data, correct_ecc, + size); + err = -EINVAL; + goto error; } - - pr_err("mtd_nandecctest: not ok - %s\n", testname); - dump_data_ecc(error_data, error_ecc, correct_data, correct_ecc, size); - - return -EINVAL; + pr_info("mtd_nandecctest: ok - %s\n", testname); +error: + kfree(error_data); + kfree(error_ecc); + kfree(correct_data); + kfree(correct_ecc); + + return err; } #else