28 Oct, 2010

40 commits

  • Remove checking @addr greater than 0 because @addr is now unsigned.

    Signed-off-by: Namhyung Kim
    Cc: Michal Simek
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Use new 'regno', 'datap' variables in order to remove duplicated
    expressions and unnecessary castings. Alse remove checking @addr less
    than 0 because addr is now unsigned.

    Signed-off-by: Namhyung Kim
    Acked-by: Greg Ungerer
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Use new 'regno', 'datap' variables in order to remove duplicated
    expressions and unnecessary castings.

    Signed-off-by: Namhyung Kim
    Acked-by: Geert Uytterhoeven
    Cc: Roman Zippel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Use new 'datap' variable in order to remove duplicated castings.

    Signed-off-by: Namhyung Kim
    Cc: Hirokazu Takata
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Use new 'regno', 'datap' variables in order to remove duplicated
    expressions and unnecessary castings. Alse remove checking @addr
    less than 0 because addr is now unsigned.

    Signed-off-by: Namhyung Kim
    Cc: Yoshinori Sato
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Use new 'regno', 'datap' variables in order to remove duplicated
    expressions and unnecessary castings. Alse remove checking @addr
    less than 0 because addr is now unsigned.

    Signed-off-by: Namhyung Kim
    Cc: David Howells
    Cc: "Daniel K."
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Use new 'regno' variable in order to remove redandunt expression and
    remove checking @addr less than 0 because @addr is now unsigned. Also
    update 'datap' on PTRACE_GET/SETREGS to fix a bug on arch-v10.

    Signed-off-by: Namhyung Kim
    Acked-by: Mikael Starvik
    Cc: Jesper Nilsson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Change signature of get/put_reg() according to the change of arch_ptrace()
    and remove unnecessary castings.

    Signed-off-by: Namhyung Kim
    Acked-by: Mike Frysinger
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • use new 'datap' variable type of void pointer in order to remove unnecessary
    castings.

    Signed-off-by: Namhyung Kim
    Acked-by: Haavard Skinnemoen
    Cc: Hans-Christian Egtvedt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • use new 'datap' variable in order to remove unnecessary castings.

    Signed-off-by: Namhyung Kim
    Cc: Russell King
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Remove checking @addr less than 0 because @addr is now unsigned and
    use new udescp variable in order to remove unnecessary castings.

    [akpm@linux-foundation.org: fix unused variable 'udescp']
    Signed-off-by: Namhyung Kim
    Cc: Thomas Gleixner
    Cc: Ingo Molnar
    Cc: "H. Peter Anvin"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Fix up the arguments to arch_ptrace() to take account of the fact that
    @addr and @data are now unsigned long rather than long as of a preceding
    patch in this series.

    Signed-off-by: Namhyung Kim
    Cc:
    Acked-by: Roland McGrath
    Acked-by: David Howells
    Acked-by: Geert Uytterhoeven
    Acked-by: David S. Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Use new 'datavp' and 'datalp' variables to remove unnecesary castings.

    Signed-off-by: Namhyung Kim
    Acked-by: Roland McGrath
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • Since userspace API of ptrace syscall defines @addr and @data as void
    pointers, it would be more appropriate to define them as unsigned long in
    kernel. Therefore related functions are changed also.

    'unsigned long' is typically used in other places in kernel as an opaque
    data type and that using this helps cleaning up a lot of warnings from
    sparse.

    Suggested-by: Arnd Bergmann
    Signed-off-by: Namhyung Kim
    Acked-by: Arnd Bergmann
    Acked-by: Roland McGrath
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • exit_ptrace() releases and regrabs tasklist_lock but was missing proper
    annotation. Add it.

    Signed-off-by: Namhyung Kim
    Acked-by: Roland McGrath
    Cc: Ingo Molnar
    Cc: Oleg Nesterov
    Signed-off-by: Linus Torvalds

    Namhyung Kim
     
  • This patch extracts the core logic from mem_cgroup_update_file_mapped() as
    mem_cgroup_update_file_stat() and adds a wrapper.

    As a planned future update, memory cgroup has to count dirty pages to
    implement dirty_ratio/limit. And more, the number of dirty pages is
    required to kick flusher thread to start writeback. (Now, no kick.)

    This patch is preparation for it and makes other statistics implementation
    clearer. Just a clean up.

    Signed-off-by: KAMEZAWA Hiroyuki
    Acked-by: Balbir Singh
    Reviewed-by: Greg Thelen
    Cc: Daisuke Nishimura
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • An event counter MEM_CGROUP_ON_MOVE is used for quick check whether file
    stat update can be done in async manner or not. Now, it use percpu
    counter and for_each_possible_cpu to update.

    This patch replaces for_each_possible_cpu to for_each_online_cpu and adds
    necessary synchronization logic at CPU HOTPLUG.

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: KAMEZAWA Hiroyuki
    Cc: Balbir Singh
    Cc: Daisuke Nishimura
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • Now, memcgroup's per cpu coutner uses for_each_possible_cpu() to get the
    value. It's better to use for_each_online_cpu() and a cpu hotplug
    handler.

    This patch only handles statistics counter. MEM_CGROUP_ON_MOVE will be
    handled in another patch.

    Signed-off-by: KAMEZAWA Hiroyuki
    Cc: Balbir Singh
    Cc: Daisuke Nishimura
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • In memory cgroup management, we sometimes have to walk through
    subhierarchy of cgroup to gather informaiton, or lock something, etc.

    Now, to do that, mem_cgroup_walk_tree() function is provided. It calls
    given callback function per cgroup found. But the bad thing is that it
    has to pass a fixed style function and argument, "void*" and it adds much
    type casting to memcontrol.c.

    To make the code clean, this patch replaces walk_tree() with

    for_each_mem_cgroup_tree(iter, root)

    An iterator style call. The good point is that iterator call doesn't have
    to assume what kind of function is called under it. A bad point is that
    it may cause reference-count leak if a caller use "break" from the loop by
    mistake.

    I think the benefit is larger. The modified code seems straigtforward and
    easy to read because we don't have misterious callbacks and pointer cast.

    Signed-off-by: KAMEZAWA Hiroyuki
    Cc: Balbir Singh
    Cc: Daisuke Nishimura
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • At accounting file events per memory cgroup, we need to find memory cgroup
    via page_cgroup->mem_cgroup. Now, we use lock_page_cgroup() for guarantee
    pc->mem_cgroup is not overwritten while we make use of it.

    But, considering the context which page-cgroup for files are accessed,
    we can use alternative light-weight mutual execusion in the most case.

    At handling file-caches, the only race we have to take care of is "moving"
    account, IOW, overwriting page_cgroup->mem_cgroup. (See comment in the
    patch)

    Unlike charge/uncharge, "move" happens not so frequently. It happens only when
    rmdir() and task-moving (with a special settings.)
    This patch adds a race-checker for file-cache-status accounting v.s. account
    moving. The new per-cpu-per-memcg counter MEM_CGROUP_ON_MOVE is added.
    The routine for account move
    1. Increment it before start moving
    2. Call synchronize_rcu()
    3. Decrement it after the end of moving.
    By this, file-status-counting routine can check it needs to call
    lock_page_cgroup(). In most case, I doesn't need to call it.

    Following is a perf data of a process which mmap()/munmap 32MB of file cache
    in a minute.

    Before patch:
    28.25% mmap mmap [.] main
    22.64% mmap [kernel.kallsyms] [k] page_fault
    9.96% mmap [kernel.kallsyms] [k] mem_cgroup_update_file_mapped
    3.67% mmap [kernel.kallsyms] [k] filemap_fault
    3.50% mmap [kernel.kallsyms] [k] unmap_vmas
    2.99% mmap [kernel.kallsyms] [k] __do_fault
    2.76% mmap [kernel.kallsyms] [k] find_get_page

    After patch:
    30.00% mmap mmap [.] main
    23.78% mmap [kernel.kallsyms] [k] page_fault
    5.52% mmap [kernel.kallsyms] [k] mem_cgroup_update_file_mapped
    3.81% mmap [kernel.kallsyms] [k] unmap_vmas
    3.26% mmap [kernel.kallsyms] [k] find_get_page
    3.18% mmap [kernel.kallsyms] [k] __do_fault
    3.03% mmap [kernel.kallsyms] [k] filemap_fault
    2.40% mmap [kernel.kallsyms] [k] handle_mm_fault
    2.40% mmap [kernel.kallsyms] [k] do_page_fault

    This patch reduces memcg's cost to some extent.
    (mem_cgroup_update_file_mapped is called by both of map/unmap)

    Note: It seems some more improvements are required..but no idea.
    maybe removing set/unset flag is required.

    Signed-off-by: KAMEZAWA Hiroyuki
    Reviewed-by: Daisuke Nishimura
    Cc: Balbir Singh
    Cc: Greg Thelen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • Presently memory cgroup accounts file-mapped by counter and flag. counter
    is working in the same way with zone_stat but FileMapped flag only exists
    in memcg (for helping move_account).

    This flag can be updated wrongly in a case. Assume CPU0 and CPU1 and a
    thread mapping a page on CPU0, another thread unmapping it on CPU1.

    CPU0 CPU1
    rmv rmap (mapcount 1->0)
    add rmap (mapcount 0->1)
    lock_page_cgroup()
    memcg counter+1 (some delay)
    set MAPPED FLAG.
    unlock_page_cgroup()
    lock_page_cgroup()
    memcg counter-1
    clear MAPPED flag

    In the above sequence counter is properly updated but FLAG is not. This
    means that representing a state by a flag which is maintained by counter
    needs some special care.

    To handle this, when clearing a flag, this patch check mapcount directly
    and clear the flag only when mapcount == 0. (if mapcount >0, someone will
    make it to zero later and flag will be cleared.)

    Reverse case, dec-after-inc cannot be a problem because page_table_lock()
    works well for it. (IOW, to make above sequence, 2 processes should touch
    the same page at once with map/unmap.)

    Signed-off-by: KAMEZAWA Hiroyuki
    Cc: Balbir Singh
    Cc: Daisuke Nishimura
    Cc: Greg Thelen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     
  • The ns_cgroup will be removed very soon. Let's warn, for this version,
    ns_cgroup is deprecated.

    Make ns_cgroup and clone_children exclusive. If the clone_children is set
    and the ns_cgroup is mounted, let's fail with EINVAL when the ns_cgroup
    subsys is created (a printk will help the user to understand why the
    creation fails).

    Update the feature remove schedule file with the deprecated ns_cgroup.

    Signed-off-by: Daniel Lezcano
    Acked-by: Paul Menage
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Lezcano
     
  • Function "strcpy" is used without check for maximum allowed source string
    length and could cause destination string overflow. Check for string
    length is added before using "strcpy". Function now is return error if
    source string length is more than a maximum.

    akpm: presently considered NotABug, but add the check for general
    future-safeness and robustness.

    Signed-off-by: Evgeny Kuznetsov
    Acked-by: Paul Menage
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Evgeny Kuznetsov
     
  • Current behavior:
    =================

    (1) When we mount a cgroup, we can specify the 'all' option which
    means to enable all the cgroup subsystems. This is the default option
    when no option is specified.

    (2) If we want to mount a cgroup with a subset of the supported cgroup
    subsystems, we have to specify a subsystems name list for the mount
    option.

    (3) If we specify another option like 'noprefix' or 'release_agent',
    the actual code wants the 'all' or a subsystem name option specified
    also. Not critical but a bit not friendly as we should assume (1) in
    this case.

    (4) Logically, the 'all' option is mutually exclusive with a subsystem
    name, but this is not detected.

    In other words:
    succeed : mount -t cgroup -o all,freezer cgroup /cgroup
    => is it 'all' or 'freezer' ?
    fails : mount -t cgroup -o noprefix cgroup /cgroup
    => succeed if we do '-o noprefix,all'

    The following patches consolidate a bit the mount options check.

    New behavior:
    =============

    (1) untouched
    (2) untouched
    (3) the 'all' option will be by default when specifying other than
    a subsystem name option
    (4) raises an error

    In other words:
    fails : mount -t cgroup -o all,freezer cgroup /cgroup
    succeed : mount -t cgroup -o noprefix cgroup /cgroup

    For the sake of lisibility, the if ... then ... else ... if ...
    indentation when parsing the options has been changed to:
    if ... then
    ...
    continue
    fi

    Signed-off-by: Daniel Lezcano
    Signed-off-by: Serge E. Hallyn
    Reviewed-by: Li Zefan
    Reviewed-by: Paul Menage
    Cc: Eric W. Biederman
    Cc: Jamal Hadi Salim
    Cc: Matt Helsley
    Cc: Balbir Singh
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Lezcano
     
  • The ns_cgroup is a control group interacting with the namespaces. When a
    new namespace is created, a corresponding cgroup is automatically created
    too. The cgroup name is the pid of the process who did 'unshare' or the
    child of 'clone'.

    This cgroup is tied with the namespace because it prevents a process to
    escape the control group and use the post_clone callback, so the child
    cgroup inherits the values of the parent cgroup.

    Unfortunately, the more we use this cgroup and the more we are facing
    problems with it:

    (1) when a process unshares, the cgroup name may conflict with a
    previous cgroup with the same pid, so unshare or clone return -EEXIST

    (2) the cgroup creation is out of control because there may have an
    application creating several namespaces where the system will
    automatically create several cgroups in his back and let them on the
    cgroupfs (eg. a vrf based on the network namespace).

    (3) the mix of (1) and (2) force an administrator to regularly check
    and clean these cgroups.

    This patchset removes the ns_cgroup by adding a new flag to the cgroup and
    the cgroupfs mount option. It enables the copy of the parent cgroup when
    a child cgroup is created. We can then safely remove the ns_cgroup as
    this flag brings a compatibility. We have now to manually create and add
    the task to a cgroup, which is consistent with the cgroup framework.

    This patch:

    Sent as an answer to a previous thread around the ns_cgroup.

    https://lists.linux-foundation.org/pipermail/containers/2009-June/018627.html

    It adds a control file 'clone_children' for a cgroup. This control file
    is a boolean specifying if the child cgroup should be a clone of the
    parent cgroup or not. The default value is 'false'.

    This flag makes the child cgroup to call the post_clone callback of all
    the subsystem, if it is available.

    At present, the cpuset is the only one which had implemented the
    post_clone callback.

    The option can be set at mount time by specifying the 'clone_children'
    mount option.

    Signed-off-by: Daniel Lezcano
    Signed-off-by: Serge E. Hallyn
    Cc: Eric W. Biederman
    Acked-by: Paul Menage
    Reviewed-by: Li Zefan
    Cc: Jamal Hadi Salim
    Cc: Matt Helsley
    Acked-by: Balbir Singh
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Daniel Lezcano
     
  • There are 4 state transitions possible for a freezer. Only FREEZING ->
    FROZEN transaction is done lazily. This patch allows update_freezer_state
    only to perform this transaction and renames the function to
    update_if_frozen.

    Moreover is_task_frozen_enough function is removed and its every occurence
    is replaced with frozen(). Therefore for a group to become FROZEN every
    task must be frozen.

    The previous version could trigger a following bug: When cgroup is in the
    process of freezing (but none of its tasks are frozen yet),
    update_freezer_state() (called from freezer_read or freezer_write) would
    incorrectly report that a group is 'THAWED' (because nfrozen = 0),
    allowing the transaction FREEZING -> THAWED without writing anything to
    'freezer.state'. This is incorrect according to the documentation. This
    could result in a 'THAWED' cgroup with frozen tasks inside.

    A code to reproduce this bug is available here:
    http://pentium.hopto.org/~thinred/repos/linux-misc/freezer_bug2.c

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Tomasz Buchert
    Cc: Matt Helsley
    Cc: Paul Menage
    Cc: Li Zefan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Tomasz Buchert
     
  • It is possible to move a task from its cgroup even if this group is
    'FREEZING'. This results in a nasty bug - the moved task will become
    frozen OUTSIDE its original cgroup and will remain in a permanent 'D'
    state.

    This patch allows to migrate the task only between THAWED cgroups.

    This behavior was observed and easily reproduced on a single core laptop.
    Notice that reproducibility depends highly on the machine used. Program
    and instructions how to reproduce the bug can be fetched from:
    http://pentium.hopto.org/~thinred/repos/linux-misc/freezer_bug.c

    Signed-off-by: Tomasz Buchert
    Cc: Matt Helsley
    Cc: Paul Menage
    Cc: Li Zefan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Tomasz Buchert
     
  • The root freezer_state is always CGROUP_THAWED so we can remove the
    special case from the code. The test itself can be handy and is extracted
    to static function.

    Signed-off-by: Tomasz Buchert
    Cc: Matt Helsley
    Cc: Paul Menage
    Cc: Li Zefan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Tomasz Buchert
     
  • When dirty_ratio or dirty_bytes is written the other parameter is disabled
    and set to 0 (in dirty_bytes_handler() / dirty_ratio_handler()).

    We do the same for dirty_background_ratio and dirty_background_bytes.

    However, in the sysctl documentation, we say that the counterpart becomes
    a function of the old value, that is not correct.

    Clarify the documentation reporting the actual behaviour.

    Reviewed-by: Greg Thelen
    Acked-by: David Rientjes
    Signed-off-by: Andrea Righi
    Cc: Randy Dunlap
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrea Righi
     
  • If a CD has both Rock Ridge and Joliet extensions and the ISO root
    directory is empty, no files are visible. Disable Rock Ridge extensions
    in this case and use Joliet root directory instead.

    Signed-off-by: Ondrej Zary
    Cc: Al Viro
    Cc: Guenter Roeck
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ondrej Zary
     
  • Untested, but looks like an obvious typo to me.

    Signed-off-by: Nicolas Kaiser
    Cc: Tomi Valkeinen
    Cc: Tony Lindgren
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nicolas Kaiser
     
  • This code is preceded by a call to framebuffer_alloc, which allocates
    memory, so this memory should be freed before leaving the function in an
    error case. out_release_framebuffer just frees the frame buffer and
    returns.

    A simplified version of the semantic match that finds this problem is:
    (http://coccinelle.lip6.fr/)

    //
    @r exists@
    local idexpression x;
    expression E;
    identifier f1;
    iterator I;
    @@

    x = framebuffer_alloc(...);
    }
    when != I (...) { }
    (
    x == NULL
    |
    x == E
    |
    x->f1
    )
    ...>
    * return ...;
    //

    Signed-off-by: Julia Lawall
    Cc: Ralf Baechle
    Cc: Arnaud Patard
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Julia Lawall
     
  • fb_{read,write} access the framebuffer using lots of fb_{read,write}l's
    but don't check that the file position is aligned which can cause problems
    on some architectures which do not support unaligned accesses.

    Since the operations are essentially memcpy_{from,to}io, new
    fb_memcpy_{from,to}fb macros have been defined and these are used instead.

    For Sparc, fb_{read,write} macros use sbus_{read,write}, so this defines
    new sbus_memcpy_{from,to}io functions the same as memcpy_{from,to}io but
    using sbus_{read,write}b instead of {read,write}b.

    Signed-off-by: James Hogan
    Acked-by: David S. Miller
    Acked-by: Florian Tobias Schandinat
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    James Hogan
     
  • Change a few lines of indentation to tabs.

    Signed-off-by: James Hogan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    James Hogan
     
  • The function has an unsigned return type, but returns a negative constant
    to indicate an error condition. The result of calling the function is
    only tested by comparison to 0, and thus unsigned is not needed and can be
    dropped from the return type.

    A sematic match that finds this problem is as follows:
    (http://coccinelle.lip6.fr/)

    //
    @exists@
    identifier f;
    constant C;
    @@

    unsigned f(...)
    { }
    //

    Signed-off-by: Julia Lawall
    Cc: Petr Vandrovec
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Julia Lawall
     
  • I tested savagefb on 3 different Savage 4 cards:
    Diamond Stealth III S520
    Number Nine SR9
    Datapath Horizon 2S (two savage chips on a PCI card)

    it worked except the DDC which did not work on any of them.

    Looking at the BIOS code, it does not use MMIO register 0xff20 but CRT
    register 0xa0 or 0xb1 - depending on the chip revision and something in
    register 0xa6. With this patch, DDC works fine on all 3 cards (even on
    the second head of Horizon 2S - although it does not display anything as
    it's misconfigured because of missing BIOS).

    Signed-off-by: Ondrej Zary
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Ondrej Zary
     
  • The CONFIG_FB_MATROX_G ifdef isn't necessary at this point, because it is
    checked in an outer ifdef level already and has no effect here.

    Signed-off-by: Christian Dietrich
    Acked-by: Jean Delvare
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christian Dietrich
     
  • In this case the logic is very similar but the IRQs are not exposed and
    the device is not picked up via PCI

    Based on a separate internal whitney point driver by Yin Kangkai.

    Signed-off-by: Alan Cox
    Cc: Yin Kangkai
    Cc: Alek Du
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Alan Cox
     
  • Deweird this driver.

    Cc: Alek Du
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • Topcliff PCH is the platform controller hub that is going to be used in
    Intel's upcoming general embedded platform. All IO peripherals in
    Topcliff PCH are actually devices sitting on AMBA bus. Topcliff PCH has
    GPIO I/F. Using this I/F, it is able to access system devices connected
    to GPIO.

    [akpm@linux-foundation.org: ese DEFINE_PCI_DEVICE_TABLE (per Joe Perches)]
    Signed-off-by: Tomoya MORINAGA
    Reviewed-by: Mark Brown
    Cc: Rabin Vincent
    Cc: Samuel Ortiz
    Cc: Linus Walleij
    Cc: Tomoya MORINAGA
    Cc: Joe Perches
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Tomoya MORINAGA