linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@free-electrons.com>
To: Daniel Walter <dwalter@sigma-star.at>
Cc: linux-mtd@lists.infradead.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 00/46] Nandsim facelift (part I of II)
Date: Sun, 16 Oct 2016 18:24:41 +0200	[thread overview]
Message-ID: <20161016182441.49adc653@bbrezillon> (raw)
In-Reply-To: <cover.1474450295.git.dwalter@sigma-star.at>

Daniel, Richard,

On Wed, 21 Sep 2016 11:43:29 +0200
Daniel Walter <dwalter@sigma-star.at> wrote:

> Changes since V1:
>   Incooperate feedback for nand_cleanup()
>   Improve commit messages
> 
> 
> 
> Over a decade ago nandsim was introduced to Linux. The main purpose is having a software implementation of a NAND chip for rapid prototyping systems such as UBI on top of it. On
> the other hand is it also heavily used to load and inspect dumps from real NAND flashes. The current design allows only having a single chip and all parameters are passed as
> modules parameters. Another draw back is that it emulates all NAND chip internals including command parsing, this makes it slow and error prone wrt. changes in nand_base.c since
> the emulated chip is not really ONFI compliant.
> 
> This series addresses the singleton property of nandsim. It allows having multiple instances which can be controlled by a new userspace tool, nandsimctl. Nandsimctl works like
> losetup. You can add and remove instances with different settings.
> To allow multiple instances nandsim offers an ioctl() interface via a new device file, /dev/nandsimctl, to userspace.
> 
> Currently nandsim has two backends, ram and cache. In the default backend mode, ram, all data you change is stored in main memory. For smaller chips this works well but becomes
> problematic when modern multi-gigabyte chips are emulated. Cache mode addresses this drawback and redirects program commands to a local file. Using the cache_file module parameter
> the path of the backing file can be set. When nandsim is not a module passing a file name to it can lead to unexpected behavior since during kernel bootup the real root filesystem
> might not be ready and nandsim will populate the cache file on the initial root filesysem which is either tmpfs or worse a ramfs.
> 
> Via the new ioctl() interface a third backend mode can be used, file mode. File mode works like cache file but all data (including erases and OOB data) are stored on a local file.
> This file can also also be reused later. It is also possible to operate nandsim in a mode to omit existing OOB data and masquerade OOB bytes to 0xFF. This allows using a nanddump
> (without OOB) from a real NAND chip directly in nandsim using the file backend. That way you don't have to use nandwrite or other tools to write the dump into yout MTD before using
> it. You can directly attach the dump in a losetup alike way.
> 
> The ioctl() accepts all existing nandsim parameters except that in cache mode you pass a file descriptor instead of a file name to nandsim. This allows utilizing O_TMPFILE.
> To preserve existing behavior and no breaking any users of nandsim it is still possible to specify all parameters using module parameters but these parameters will only affect the
> first nandsim instance which will be automatically created upon module loading. If you don't have to have a default instance and explicitly create nandsim instances using
> nandsimctl pass defaults=n to the module.
> 
> There will be an additional patch series for mtd-utils containing nandsimctl.
> 
> A side effect of heavily reworking nandsim's backend internals it is now also possible to create custom backends. A custom backed was added to UserModeLinux. It allows directly
> booting from a nanddump using UML such that UBIFS as rootfs can be tested nicely on virtual machines.
> On step ahead for MTD testing.
> 
> The series itself is less straight forward than I wanted it to be, mostly because while adding new features it was needed to cleanup some parts, over and over.
> 
> Part II of that series will address the chip emulation nature of nandsim. It will add a second emulation mode. By default NAND chip emulation will be used but to allow arbitrary
> sized MTDs a more simple mode will be added which just allocates a MTD with the expected sizes instead of mocking nand_base.c.

I really like the new approach for 2 reasons:
1/ it allows creating several NAND devs, and you can do that after the
   module has been loaded.
2/ it fixes the partial NAND detection support by allowing one to
   describe its NAND in term of page size, eraseblock size, oob
   size, ...

But I'm wondering if we should not create a new driver instead of
trying to fix the old one (I must admit I haven't been through the 46
patches of this series, but last time we discussed it on IRC, Richard
said it actually was a complete rewrite of the nandsim driver).

Moreover, if we specify the flash layout manually, maybe we could make
it an mtdsim driver instead of restricting the emulation to NAND
devices.

What do you think?

Regards,

Boris

  parent reply	other threads:[~2016-10-16 16:24 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-21  9:43 [PATCH v2 00/46] Nandsim facelift (part I of II) Daniel Walter
2016-09-21  9:43 ` [PATCH v2 01/46] mtdpart: Propagate _get/put_device() Daniel Walter
2016-09-21 10:15   ` Boris Brezillon
2016-09-28 20:16     ` Brian Norris
2016-12-14 19:24       ` Karl Beldan
2016-12-14 21:09         ` Brian Norris
2016-12-14 21:12           ` Richard Weinberger
2016-12-14 23:40             ` Brian Norris
2016-12-15  7:09           ` Karl Beldan
2016-12-15  7:51             ` Richard Weinberger
2016-12-28 18:53               ` Karl Beldan
2016-09-21  9:44 ` [PATCH v2 02/46] mtd: nand: Provide nand_cleanup() function to free NAND related resources Daniel Walter
2016-09-21  9:58   ` Boris Brezillon
2016-09-21 12:43   ` kbuild test robot
2016-09-21 14:25   ` Boris Brezillon
2016-09-21 14:38     ` Daniel Walter
2016-09-21 14:42       ` Boris Brezillon
2016-09-21  9:45 ` [PATCH v2 03/46] mtd: Don't unconditionally unregister reboot notifier Daniel Walter
2016-09-21 14:31   ` Boris Brezillon
2016-09-21 14:33     ` Daniel Walter
2016-10-09  5:20   ` Brian Norris
2016-09-21  9:45 ` [PATCH v2 04/46] mtd: Don't unconditionally execute remove notifiers Daniel Walter
2016-09-21  9:46 ` [PATCH v2 05/46] mtd: Don't print a scary message when trying to remove a busy MTD Daniel Walter
2016-09-21  9:46 ` [PATCH v2 06/46] mtd: nandsim: Add basic control file support Daniel Walter
2016-09-21  9:47 ` [PATCH v2 07/46] mtd: nandsim: Begin with removal of global state Daniel Walter
2016-09-21  9:47 ` [PATCH v2 08/46] mtd: nandsim: Kill global nsmtd Daniel Walter
2016-09-21  9:47 ` [PATCH v2 09/46] mtd: nandsim: Don't directly use module parameters Daniel Walter
2016-09-21  9:48 ` [PATCH v2 10/46] mtd: nandsim: Add helper functions for pointer magic Daniel Walter
2016-09-21  9:48 ` [PATCH v2 11/46] mtd: nandsim: Factor out nandsim parameters Daniel Walter
2016-09-21  9:48 ` [PATCH v2 12/46] mtd: nandsim: Make debugfs logic multi instance capable Daniel Walter
2016-09-21  9:49 ` [PATCH v2 13/46] mtd: nandsim: Add final logic for multiple instances Daniel Walter
2016-09-21  9:49 ` [PATCH v2 14/46] mtd: nandsim: Add simulator id to MTD parition name Daniel Walter
2016-09-21  9:49 ` [PATCH v2 15/46] mtd: nandsim: Introduce backend operations Daniel Walter
2016-09-21  9:49 ` [PATCH v2 16/46] mtd: nandsim: Print error when backend init failed Daniel Walter
2016-09-21  9:50 ` [PATCH v2 17/46] mtd: nandsim: Allow external backends Daniel Walter
2016-09-21  9:50 ` [PATCH v2 18/46] mtd: nandsim: Add basic support for a file backend Daniel Walter
2016-09-21  9:50 ` [PATCH v2 19/46] mtd: nandsim: UAPI v1 Daniel Walter
2016-11-20 10:13   ` Boris Brezillon
2016-09-21  9:51 ` [PATCH v2 20/46] mtd: nandsim: Implement preliminary constructor function Daniel Walter
2016-09-21  9:51 ` [PATCH v2 21/46] mtd: nandsim: Implement preliminary destructor function Daniel Walter
2016-09-21 12:56   ` kbuild test robot
2016-09-21  9:51 ` [PATCH v2 22/46] mtd: nandsim: Cleanup destroy handlers Daniel Walter
2016-09-21  9:51 ` [PATCH v2 23/46] mtd: nandsim: Unify file backend init logic Daniel Walter
2016-09-21  9:51 ` [PATCH v2 24/46] mtd: nandsim: Wire up NANDSIM_MODE_CACHEFILE ioctl mode Daniel Walter
2016-09-21  9:52 ` [PATCH v2 25/46] mtd: nandsim: Print backend name Daniel Walter
2016-09-21  9:52 ` [PATCH v2 26/46] mtd: nandsim: use the existing output macros Daniel Walter
2016-09-21  9:52 ` [PATCH v2 27/46] mtd: nandsim: Add no_oob mode Daniel Walter
2016-09-21  9:52 ` [PATCH v2 28/46] mtd: nandsim: Refine exports Daniel Walter
2016-09-21  9:54 ` [PATCH v2 29/46] um: Add nandsim backend driver Daniel Walter
2016-09-21  9:54 ` [PATCH v2 30/46] mtd: nandsim: Use pr_ style logging Daniel Walter
2016-09-21  9:54 ` [PATCH v2 31/46] mtd: nandsim: Remove NS_RAW_OFFSET_OOB Daniel Walter
2016-09-21  9:54 ` [PATCH v2 32/46] mtd: nandsim: Remove NS_IS_INITIALIZED Daniel Walter
2016-09-21  9:55 ` [PATCH v2 33/46] mtd: nandsim: Relax page size restrictions Daniel Walter
2016-09-21  9:55 ` [PATCH v2 34/46] mtd: nandsim: Support bitflip and read error emulation in file backend Daniel Walter
2016-09-21  9:55 ` [PATCH v2 35/46] mtd: nandsim: Make NANDSIM_MAX_DEVICES part of uapi Daniel Walter
2016-09-21  9:55 ` [PATCH v2 36/46] mtd: nandsim: Cleanup constants Daniel Walter
2016-09-21  9:55 ` [PATCH v2 37/46] mtd: nandsim: Turn parts[] into a integer Daniel Walter
2016-09-21  9:56 ` [PATCH v2 38/46] mtd: nandsim: Expose partition creation logic to user space Daniel Walter
2016-09-21  9:56 ` [PATCH v2 39/46] mtd: nandsim: Rework init error paths Daniel Walter
2016-09-21  9:56 ` [PATCH v2 40/46] mtd: nandsim: Expose BBT, delays, etc.. to userspace Daniel Walter
2016-09-21  9:56 ` [PATCH v2 41/46] mtd: nandsim: Expose support for weakpages/blocks " Daniel Walter
2016-09-21  9:57 ` [PATCH v2 42/46] mtd: nandsim: Don't printk on ENOMEM Daniel Walter
2016-09-21  9:57 ` [PATCH v2 43/46] mtd: nandsim: Wire up NANDSIM_IOC_NEW_INSTANCE Daniel Walter
2016-09-21  9:57 ` [PATCH v2 44/46] mtd: nandsim: Wire up NANDSIM_IOC_DESTROY_INSTANCE Daniel Walter
2016-09-21  9:57 ` [PATCH v2 45/46] mtd: nandsim: Always answer all 8 bytes from NAND_CMD_READID Daniel Walter
2016-09-21  9:57 ` [PATCH v2 46/46] mtd/nandsim: Add ioctl for info Daniel Walter
2016-10-16 16:24 ` Boris Brezillon [this message]
2016-11-14 16:24   ` [PATCH v2 00/46] Nandsim facelift (part I of II) Richard Weinberger
2016-11-20 10:26     ` Boris Brezillon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161016182441.49adc653@bbrezillon \
    --to=boris.brezillon@free-electrons.com \
    --cc=dwalter@sigma-star.at \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mtd@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).