23 Aug, 2010

1 commit


08 Aug, 2010

1 commit


30 Mar, 2010

1 commit

  • …it slab.h inclusion from percpu.h

    percpu.h is included by sched.h and module.h and thus ends up being
    included when building most .c files. percpu.h includes slab.h which
    in turn includes gfp.h making everything defined by the two files
    universally available and complicating inclusion dependencies.

    percpu.h -> slab.h dependency is about to be removed. Prepare for
    this change by updating users of gfp and slab facilities include those
    headers directly instead of assuming availability. As this conversion
    needs to touch large number of source files, the following script is
    used as the basis of conversion.

    http://userweb.kernel.org/~tj/misc/slabh-sweep.py

    The script does the followings.

    * Scan files for gfp and slab usages and update includes such that
    only the necessary includes are there. ie. if only gfp is used,
    gfp.h, if slab is used, slab.h.

    * When the script inserts a new include, it looks at the include
    blocks and try to put the new include such that its order conforms
    to its surrounding. It's put in the include block which contains
    core kernel includes, in the same order that the rest are ordered -
    alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
    doesn't seem to be any matching order.

    * If the script can't find a place to put a new include (mostly
    because the file doesn't have fitting include block), it prints out
    an error message indicating which .h file needs to be added to the
    file.

    The conversion was done in the following steps.

    1. The initial automatic conversion of all .c files updated slightly
    over 4000 files, deleting around 700 includes and adding ~480 gfp.h
    and ~3000 slab.h inclusions. The script emitted errors for ~400
    files.

    2. Each error was manually checked. Some didn't need the inclusion,
    some needed manual addition while adding it to implementation .h or
    embedding .c file was more appropriate for others. This step added
    inclusions to around 150 files.

    3. The script was run again and the output was compared to the edits
    from #2 to make sure no file was left behind.

    4. Several build tests were done and a couple of problems were fixed.
    e.g. lib/decompress_*.c used malloc/free() wrappers around slab
    APIs requiring slab.h to be added manually.

    5. The script was run on all .h files but without automatically
    editing them as sprinkling gfp.h and slab.h inclusions around .h
    files could easily lead to inclusion dependency hell. Most gfp.h
    inclusion directives were ignored as stuff from gfp.h was usually
    wildly available and often used in preprocessor macros. Each
    slab.h inclusion directive was examined and added manually as
    necessary.

    6. percpu.h was updated not to include slab.h.

    7. Build test were done on the following configurations and failures
    were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my
    distributed build env didn't work with gcov compiles) and a few
    more options had to be turned off depending on archs to make things
    build (like ipr on powerpc/64 which failed due to missing writeq).

    * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
    * powerpc and powerpc64 SMP allmodconfig
    * sparc and sparc64 SMP allmodconfig
    * ia64 SMP allmodconfig
    * s390 SMP allmodconfig
    * alpha SMP allmodconfig
    * um on x86_64 SMP allmodconfig

    8. percpu.h modifications were reverted so that it could be applied as
    a separate patch and serve as bisection point.

    Given the fact that I had only a couple of failures from tests on step
    6, I'm fairly confident about the coverage of this conversion patch.
    If there is a breakage, it's likely to be something in one of the arch
    headers which should be easily discoverable easily on most builds of
    the specific arch.

    Signed-off-by: Tejun Heo <tj@kernel.org>
    Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>

    Tejun Heo
     

26 Feb, 2010

1 commit

  • The block layer calling convention is blk_queue_.
    blk_queue_max_sectors predates this practice, leading to some confusion.
    Rename the function to appropriately reflect that its intended use is to
    set max_hw_sectors.

    Also introduce a temporary wrapper for backwards compability. This can
    be removed after the merge window is closed.

    Signed-off-by: Martin K. Petersen
    Signed-off-by: Jens Axboe

    Martin K. Petersen
     

22 Dec, 2009

1 commit

  • Use resource_size() for ioremap.

    The ioremap appears to be passing the incorrect size for the platform
    resource. Unfortunately, I can't locate a user in mainline to verify
    this. Using resource_size should be the correct fix.

    Signed-off-by: H Hartley Sweeten
    Acked-by: unsik Kim
    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    H Hartley Sweeten
     

22 Sep, 2009

1 commit


28 Jul, 2009

4 commits


16 Jun, 2009

1 commit

  • eec9462088a26c046d4db3100796a340a50890b8 fold mg_disk.h into mg_disk.c,
    but mg_disk platform driver needs private data for operation. This also
    make mg_disk.c as machine independent. Seperate only needed structure and
    defines to mg_disk.h

    Signed-off-by: unsik Kim
    Signed-off-by: Jens Axboe

    unsik Kim
     

23 May, 2009

1 commit

  • Until now we have had a 1:1 mapping between storage device physical
    block size and the logical block sized used when addressing the device.
    With SATA 4KB drives coming out that will no longer be the case. The
    sector size will be 4KB but the logical block size will remain
    512-bytes. Hence we need to distinguish between the physical block size
    and the logical ditto.

    This patch renames hardsect_size to logical_block_size.

    Signed-off-by: Martin K. Petersen
    Signed-off-by: Jens Axboe

    Martin K. Petersen
     

11 May, 2009

4 commits

  • Till now block layer allowed two separate modes of request execution.
    A request is always acquired from the request queue via
    elv_next_request(). After that, drivers are free to either dequeue it
    or process it without dequeueing. Dequeue allows elv_next_request()
    to return the next request so that multiple requests can be in flight.

    Executing requests without dequeueing has its merits mostly in
    allowing drivers for simpler devices which can't do sg to deal with
    segments only without considering request boundary. However, the
    benefit this brings is dubious and declining while the cost of the API
    ambiguity is increasing. Segment based drivers are usually for very
    old or limited devices and as converting to dequeueing model isn't
    difficult, it doesn't justify the API overhead it puts on block layer
    and its more modern users.

    Previous patches converted all block low level drivers to dequeueing
    model. This patch completes the API transition by...

    * renaming elv_next_request() to blk_peek_request()

    * renaming blkdev_dequeue_request() to blk_start_request()

    * adding blk_fetch_request() which is combination of peek and start

    * disallowing completion of queued (not started) requests

    * applying new API to all LLDs

    Renamings are for consistency and to break out of tree code so that
    it's apparent that out of tree drivers need updating.

    [ Impact: block request issue API cleanup, no functional change ]

    Signed-off-by: Tejun Heo
    Cc: Rusty Russell
    Cc: James Bottomley
    Cc: Mike Miller
    Cc: unsik Kim
    Cc: Paul Clements
    Cc: Tim Waugh
    Cc: Geert Uytterhoeven
    Cc: David S. Miller
    Cc: Laurent Vivier
    Cc: Jeff Garzik
    Cc: Jeremy Fitzhardinge
    Cc: Grant Likely
    Cc: Adrian McMenamin
    Cc: Stephen Rothwell
    Cc: Bartlomiej Zolnierkiewicz
    Cc: Borislav Petkov
    Cc: Sergei Shtylyov
    Cc: Alex Dubov
    Cc: Pierre Ossman
    Cc: David Woodhouse
    Cc: Markus Lidel
    Cc: Stefan Weinhuber
    Cc: Martin Schwidefsky
    Cc: Pete Zaitcev
    Cc: FUJITA Tomonori
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • mg_disk has at most single request in flight per device. Till now,
    whenever it needs to access the in-flight request it called
    elv_next_request(). This patch makes mg_disk track the in-flight
    request directly using mg_host->req and dequeue it when processing
    starts.

    q->queuedata is set to mg_host so that mg_host can be determined
    without fetching request from the queue.

    [ Impact: dequeue in-flight request, one elv_next_request() per request ]

    Signed-off-by: Tejun Heo
    Cc: unsik Kim
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • Both request functions in mg_disk simply return when they encounter a
    !fs request, which means the request will never be cleared from the
    queue causing queue hang and indefinite retry of the request. Fix it.

    While at it, flatten condition checks and add unlikely to !fs tests.

    [ Impact: fix possible queue hang / infinite retry of !fs requests ]

    Signed-off-by: Tejun Heo
    Cc: unsik Kim
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • With recent cleanups, there is no place where low level driver
    directly manipulates request fields. This means that the 'hard'
    request fields always equal the !hard fields. Convert all
    rq->sectors, nr_sectors and current_nr_sectors references to
    accessors.

    While at it, drop superflous blk_rq_pos() < 0 test in swim.c.

    [ Impact: use pos and nr_sectors accessors ]

    Signed-off-by: Tejun Heo
    Acked-by: Geert Uytterhoeven
    Tested-by: Grant Likely
    Acked-by: Grant Likely
    Tested-by: Adrian McMenamin
    Acked-by: Adrian McMenamin
    Acked-by: Mike Miller
    Cc: James Bottomley
    Cc: Bartlomiej Zolnierkiewicz
    Cc: Borislav Petkov
    Cc: Sergei Shtylyov
    Cc: Eric Moore
    Cc: Alan Stern
    Cc: FUJITA Tomonori
    Cc: Pete Zaitcev
    Cc: Stephen Rothwell
    Cc: Paul Clements
    Cc: Tim Waugh
    Cc: Jeff Garzik
    Cc: Jeremy Fitzhardinge
    Cc: Alex Dubov
    Cc: David Woodhouse
    Cc: Martin Schwidefsky
    Cc: Dario Ballabio
    Cc: David S. Miller
    Cc: Rusty Russell
    Cc: unsik Kim
    Cc: Laurent Vivier
    Signed-off-by: Jens Axboe

    Tejun Heo
     

28 Apr, 2009

8 commits

  • While at it:
    - remove MG_REG_HEAD_MUST_BE_ON define
    - remove MG_REG_CTRL_INTR_ENABLE define
    - remove MG_REG_HEAD_LBA_MODE define
    - remove unused defines

    Cc: unsik Kim
    Signed-off-by: Bartlomiej Zolnierkiewicz
    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Bartlomiej Zolnierkiewicz
     
  • Add local copies of ata_id_string() and ata_id_c_string() to mg_disk
    so there is no need for the driver to depend on ATA and SCSI.

    [ Impact: break dependency on libata by copying ata id string functions ]

    Cc: unsik Kim
    Signed-off-by: Bartlomiej Zolnierkiewicz
    Signed-off-by: Tejun Heo
    Signed-off-by: Jens Axboe

    Bartlomiej Zolnierkiewicz
     
  • mg_disk implements its own partial completion. Convert to standard
    block layer partial completion.

    [ Impact: cleanup ]

    Signed-off-by: Tejun Heo
    Cc: unsik Kim
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • include/linux/mg_disk.h is used only by drivers/block/mg_disk.c. No
    reason to put it in a separate header. Fold it into mg_disk.c.

    [ Impact: cleanup ]

    Signed-off-by: Tejun Heo
    Cc: unsik Kim
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • rq_data_dir() can only be READ or WRITE and rq->sector and nr_sectors
    are always automatically updated after partial request completion.
    Don't worry about rq_data_dir() not being either READ or WRITE or
    manually update sector and nr_sectors.

    [ Impact: cleanup ]

    Signed-off-by: Tejun Heo
    Cc: Jörg Dorchain
    Cc: Geert Uytterhoeven
    Cc: unsik Kim
    Signed-off-by: Jens Axboe

    Tejun Heo
     
  • end_request() has been kept around for backward compatibility;
    however, it's about time for it to go away.

    * There aren't too many users left.

    * Its use of @updtodate is pretty confusing.

    * In some cases, newer code ends up using mixture of end_request() and
    [__]blk_end_request[_all](), which is way too confusing.

    So, add [__]blk_end_request_cur() and replace end_request() with it.
    Most conversions are straightforward. Noteworthy ones are...

    * paride/pcd: next_request() updated to take 0/-errno instead of 1/0.

    * paride/pf: pf_end_request() and next_request() updated to take
    0/-errno instead of 1/0.

    * xd: xd_readwrite() updated to return 0/-errno instead of 1/0.

    * mtd/mtd_blkdevs: blktrans_discard_request() updated to return
    0/-errno instead of 1/0. Unnecessary local variable res
    initialization removed from mtd_blktrans_thread().

    [ Impact: cleanup ]

    Signed-off-by: Tejun Heo
    Acked-by: Joerg Dorchain
    Acked-by: Geert Uytterhoeven
    Acked-by: Grant Likely
    Acked-by: Laurent Vivier
    Cc: Tim Waugh
    Cc: Stephen Rothwell
    Cc: Paul Mackerras
    Cc: Jeremy Fitzhardinge
    Cc: Markus Lidel
    Cc: David Woodhouse
    Cc: Pete Zaitcev
    Cc: unsik Kim

    Tejun Heo
     
  • drivers/block/mg_disk.c: In function ‘mg_dump_status’:
    drivers/block/mg_disk.c:265: warning: format ‘%ld’ expects type ‘long int’, but
    argument 2 has type ‘sector_t’

    [ Impact: kill build warning ]

    Cc: unsik Kim
    Signed-off-by: Bartlomiej Zolnierkiewicz
    Signed-off-by: Tejun Heo

    Bartlomiej Zolnierkiewicz
     
  • IRQ and timeout handlers call functions which expect locked queue lock
    without locking it. Fix it.

    While at it, convert 0s used as null pointer constant to NULLs.

    [ Impact: fix locking, cleanup ]

    Signed-off-by: Tejun Heo
    Cc: unsik Kim

    Tejun Heo
     

07 Apr, 2009

1 commit

  • This driver supports mflash IO mode for linux.

    Mflash is embedded flash drive and mainly targeted mobile and consumer
    electronic devices.

    Internally, mflash has nand flash and other hardware logics and supports 2
    different operation (ATA, IO) modes. ATA mode doesn't need any new driver
    and currently works well under standard IDE subsystem. Actually it's one
    chip SSD. IO mode is ATA-like custom mode for the host that doesn't have
    IDE interface.

    Followings are brief descriptions about IO mode.
    A. IO mode based on ATA protocol and uses some custom command. (read confirm,
    write confirm)
    B. IO mode uses SRAM bus interface.
    C. IO mode supports 4kB boot area, so host can boot from mflash.

    This driver is quitely similar to a standard ATA driver, but because of
    following reasons it is currently seperated with ATA layer.

    1. ATA layer deals standard ATA protocol. ATA layer have many low-
    level device specific interface, but data transfer keeps ATA rule.
    But, mflash IO mode doesn't.

    2. Even though currently not used in mflash driver code, mflash has
    some custom command and modes. (nand fusing, firmware patch, etc) If
    this feature supported in linux kernel, ATA layer more altered.

    3. Currently PATA platform device driver doesn't support interrupt.
    (I'm not sure) But, mflash uses interrupt (polling mode is just for
    debug).

    4. mflash is somewhat under-develop product. Even though some company
    already using mflash their own product, I think more time is needed for
    standardization of custom command and mode. That time (maybe October)
    I will talk to with ATA people. If they accept integration, I will
    integrate.

    Signed-off-by: unsik Kim
    Cc: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Jens Axboe

    unsik Kim