11 Nov, 2010

1 commit


25 Oct, 2010

1 commit

  • * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (39 commits)
    Update broken web addresses in arch directory.
    Update broken web addresses in the kernel.
    Revert "drivers/usb: Remove unnecessary return's from void functions" for musb gadget
    Revert "Fix typo: configuation => configuration" partially
    ida: document IDA_BITMAP_LONGS calculation
    ext2: fix a typo on comment in ext2/inode.c
    drivers/scsi: Remove unnecessary casts of private_data
    drivers/s390: Remove unnecessary casts of private_data
    net/sunrpc/rpc_pipe.c: Remove unnecessary casts of private_data
    drivers/infiniband: Remove unnecessary casts of private_data
    drivers/gpu/drm: Remove unnecessary casts of private_data
    kernel/pm_qos_params.c: Remove unnecessary casts of private_data
    fs/ecryptfs: Remove unnecessary casts of private_data
    fs/seq_file.c: Remove unnecessary casts of private_data
    arm: uengine.c: remove C99 comments
    arm: scoop.c: remove C99 comments
    Fix typo configue => configure in comments
    Fix typo: configuation => configuration
    Fix typo interrest[ing|ed] => interest[ing|ed]
    Fix various typos of valid in comments
    ...

    Fix up trivial conflicts in:
    drivers/char/ipmi/ipmi_si_intf.c
    drivers/usb/gadget/rndis.c
    net/irda/irnet/irnet_ppp.c

    Linus Torvalds
     

23 Oct, 2010

7 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core-2.6: (31 commits)
    driver core: Display error codes when class suspend fails
    Driver core: Add section count to memory_block struct
    Driver core: Add mutex for adding/removing memory blocks
    Driver core: Move find_memory_block routine
    hpilo: Despecificate driver from iLO generation
    driver core: Convert link_mem_sections to use find_memory_block_hinted.
    driver core: Introduce find_memory_block_hinted which utilizes kset_find_obj_hinted.
    kobject: Introduce kset_find_obj_hinted.
    driver core: fix build for CONFIG_BLOCK not enabled
    driver-core: base: change to new flag variable
    sysfs: only access bin file vm_ops with the active lock
    sysfs: Fail bin file mmap if vma close is implemented.
    FW_LOADER: fix kconfig dependency warning on HOTPLUG
    uio: Statically allocate uio_class and use class .dev_attrs.
    uio: Support 2^MINOR_BITS minors
    uio: Cleanup irq handling.
    uio: Don't clear driver data
    uio: Fix lack of locking in init_uio_class
    SYSFS: Allow boot time switching between deprecated and modern sysfs layout
    driver core: remove CONFIG_SYSFS_DEPRECATED_V2 but keep it for block devices
    ...

    Linus Torvalds
     
  • Instead of adding uio class attributes manually after the uio device has
    been created and we have sent a uevent to userspace, use the class
    attribute mechanism. This removes races and makes the code simpler.

    At the same time don't bother to dynamically allocate a struct class for
    uio, just declare one statically. Less code is needed and it is easier
    to set the class parameters.tune the class

    Signed-off-by: Eric W. Biederman
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • register_chrdev limits uio devices to 256 minor numbers which causes
    problems on one system I have with 384+ uio devices. So instead set
    UIO_MAX_DEVICES to the maximum number of minors and use
    alloc_chrdev_region to reserve the uio minors.

    The final result is that the code works the same but the uio driver now
    supports any minor the idr allocator comes up with.

    Signed-off-by: Eric W. Biederman
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • Change the value of UIO_IRQ_NONE -2 to 0. 0 is well defined in the rest
    of the kernel as the value to indicate an irq has not been assigned.

    Update the calls to request_irq and free_irq to only ignore UIO_IRQ_NONE
    and UIO_IRQ_CUSTOM allowing the rest of the kernel's possible irq
    numbers to be used.

    Signed-off-by: Eric W. Biederman
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • Currently uio sets it's driver data to NULL just as it is unregistering
    attributes. sysfs maks the guaranatee that it will not call attributes
    after device_destroy is called so this is unncessary and leads to lots
    of unnecessary code in uio.c

    Signed-off-by: Eric W. Biederman
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • There is no locking in init_uio_class so multiple
    drivers can race and create multiple uio classes.

    Fix this by simplifying the code. In particular always
    register the uio class during module_init and make things
    simpler.

    Signed-off-by: Eric W. Biederman
    Reviewed-by: Thomas Gleixner
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Eric W. Biederman
     
  • IRQ and resource[] may not have correct values until
    after PCI hotplug setup occurs at pci_enable_device() time.

    The semantic match that finds this problem is as follows:

    //
    @@
    identifier x;
    identifier request ~= "pci_request.*|pci_resource.*";
    @@

    (
    * x->irq
    |
    * x->resource
    |
    * request(x, ...)
    )
    ...
    *pci_enable_device(x)
    //

    Signed-off-by: Kulikov Vasiliy
    Acked-by: Michael S. Tsirkin
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Kulikov Vasiliy
     

18 Oct, 2010

1 commit

  • The patch below updates broken web addresses in the kernel

    Signed-off-by: Justin P. Mattock
    Cc: Maciej W. Rozycki
    Cc: Geert Uytterhoeven
    Cc: Finn Thain
    Cc: Randy Dunlap
    Cc: Matt Turner
    Cc: Dimitry Torokhov
    Cc: Mike Frysinger
    Acked-by: Ben Pfaff
    Acked-by: Hans J. Koch
    Reviewed-by: Finn Thain
    Signed-off-by: Jiri Kosina

    Justin P. Mattock
     

15 Oct, 2010

1 commit

  • All file_operations should get a .llseek operation so we can make
    nonseekable_open the default for future file operations without a
    .llseek pointer.

    The three cases that we can automatically detect are no_llseek, seq_lseek
    and default_llseek. For cases where we can we can automatically prove that
    the file offset is always ignored, we use noop_llseek, which maintains
    the current behavior of not returning an error from a seek.

    New drivers should normally not use noop_llseek but instead use no_llseek
    and call nonseekable_open at open time. Existing drivers can be converted
    to do the same when the maintainer knows for certain that no user code
    relies on calling seek on the device file.

    The generated code is often incorrectly indented and right now contains
    comments that clarify for each added line why a specific variant was
    chosen. In the version that gets submitted upstream, the comments will
    be gone and I will manually fix the indentation, because there does not
    seem to be a way to do that using coccinelle.

    Some amount of new code is currently sitting in linux-next that should get
    the same modifications, which I will do at the end of the merge window.

    Many thanks to Julia Lawall for helping me learn to write a semantic
    patch that does all this.

    ===== begin semantic patch =====
    // This adds an llseek= method to all file operations,
    // as a preparation for making no_llseek the default.
    //
    // The rules are
    // - use no_llseek explicitly if we do nonseekable_open
    // - use seq_lseek for sequential files
    // - use default_llseek if we know we access f_pos
    // - use noop_llseek if we know we don't access f_pos,
    // but we still want to allow users to call lseek
    //
    @ open1 exists @
    identifier nested_open;
    @@
    nested_open(...)
    {

    }

    @ open exists@
    identifier open_f;
    identifier i, f;
    identifier open1.nested_open;
    @@
    int open_f(struct inode *i, struct file *f)
    {

    }

    @ read disable optional_qualifier exists @
    identifier read_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    expression E;
    identifier func;
    @@
    ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
    {

    }

    @ read_no_fpos disable optional_qualifier exists @
    identifier read_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    @@
    ssize_t read_f(struct file *f, char *p, size_t s, loff_t *off)
    {
    ... when != off
    }

    @ write @
    identifier write_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    expression E;
    identifier func;
    @@
    ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
    {

    }

    @ write_no_fpos @
    identifier write_f;
    identifier f, p, s, off;
    type ssize_t, size_t, loff_t;
    @@
    ssize_t write_f(struct file *f, const char *p, size_t s, loff_t *off)
    {
    ... when != off
    }

    @ fops0 @
    identifier fops;
    @@
    struct file_operations fops = {
    ...
    };

    @ has_llseek depends on fops0 @
    identifier fops0.fops;
    identifier llseek_f;
    @@
    struct file_operations fops = {
    ...
    .llseek = llseek_f,
    ...
    };

    @ has_read depends on fops0 @
    identifier fops0.fops;
    identifier read_f;
    @@
    struct file_operations fops = {
    ...
    .read = read_f,
    ...
    };

    @ has_write depends on fops0 @
    identifier fops0.fops;
    identifier write_f;
    @@
    struct file_operations fops = {
    ...
    .write = write_f,
    ...
    };

    @ has_open depends on fops0 @
    identifier fops0.fops;
    identifier open_f;
    @@
    struct file_operations fops = {
    ...
    .open = open_f,
    ...
    };

    // use no_llseek if we call nonseekable_open
    ////////////////////////////////////////////
    @ nonseekable1 depends on !has_llseek && has_open @
    identifier fops0.fops;
    identifier nso ~= "nonseekable_open";
    @@
    struct file_operations fops = {
    ... .open = nso, ...
    +.llseek = no_llseek, /* nonseekable */
    };

    @ nonseekable2 depends on !has_llseek @
    identifier fops0.fops;
    identifier open.open_f;
    @@
    struct file_operations fops = {
    ... .open = open_f, ...
    +.llseek = no_llseek, /* open uses nonseekable */
    };

    // use seq_lseek for sequential files
    /////////////////////////////////////
    @ seq depends on !has_llseek @
    identifier fops0.fops;
    identifier sr ~= "seq_read";
    @@
    struct file_operations fops = {
    ... .read = sr, ...
    +.llseek = seq_lseek, /* we have seq_read */
    };

    // use default_llseek if there is a readdir
    ///////////////////////////////////////////
    @ fops1 depends on !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier readdir_e;
    @@
    // any other fop is used that changes pos
    struct file_operations fops = {
    ... .readdir = readdir_e, ...
    +.llseek = default_llseek, /* readdir is present */
    };

    // use default_llseek if at least one of read/write touches f_pos
    /////////////////////////////////////////////////////////////////
    @ fops2 depends on !fops1 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read.read_f;
    @@
    // read fops use offset
    struct file_operations fops = {
    ... .read = read_f, ...
    +.llseek = default_llseek, /* read accesses f_pos */
    };

    @ fops3 depends on !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier write.write_f;
    @@
    // write fops use offset
    struct file_operations fops = {
    ... .write = write_f, ...
    + .llseek = default_llseek, /* write accesses f_pos */
    };

    // Use noop_llseek if neither read nor write accesses f_pos
    ///////////////////////////////////////////////////////////

    @ fops4 depends on !fops1 && !fops2 && !fops3 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read_no_fpos.read_f;
    identifier write_no_fpos.write_f;
    @@
    // write fops use offset
    struct file_operations fops = {
    ...
    .write = write_f,
    .read = read_f,
    ...
    +.llseek = noop_llseek, /* read and write both use no f_pos */
    };

    @ depends on has_write && !has_read && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier write_no_fpos.write_f;
    @@
    struct file_operations fops = {
    ... .write = write_f, ...
    +.llseek = noop_llseek, /* write uses no f_pos */
    };

    @ depends on has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    identifier read_no_fpos.read_f;
    @@
    struct file_operations fops = {
    ... .read = read_f, ...
    +.llseek = noop_llseek, /* read uses no f_pos */
    };

    @ depends on !has_read && !has_write && !fops1 && !fops2 && !has_llseek && !nonseekable1 && !nonseekable2 && !seq @
    identifier fops0.fops;
    @@
    struct file_operations fops = {
    ...
    +.llseek = noop_llseek, /* no read or write fn */
    };
    ===== End semantic patch =====

    Signed-off-by: Arnd Bergmann
    Cc: Julia Lawall
    Cc: Christoph Hellwig

    Arnd Bergmann
     

06 Aug, 2010

3 commits


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
     

08 Mar, 2010

4 commits

  • Ben Nizette, the author of this driver, told me in a private mail that this
    project has been cancelled. He suggested to remove the driver for now, and
    will come back with a new version should the hardware really exist.
    This patch completely removes the driver.

    Signed-off-by: Hans J. Koch
    Acked-by: Ben Nizette
    Signed-off-by: Greg Kroah-Hartman

    Hans J. Koch
     
  • Two trivial fixes for the Userspace IO Kconfig file:
    1) uio_sercos3 is a PCI driver, so let it depend on PCI.
    2) "default n" under UIO_PCI_GENERIC is luxury since it is already the default.

    Acked-by: John Ogness
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    John Ogness
     
  • This patch adds a Userspace IO driver for netX-based fieldbus cards by
    Hilscher (see http://www.hilscher.com). ATM, cifX and comX cards are
    supported. The userspace part for this driver is provided by Hilscher
    and should come with the card.
    The driver is in use for several months now and has been tested by
    people at Hilscher and Linutronix.

    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Hans J. Koch
     
  • Constify struct sysfs_ops.

    This is part of the ops structure constification
    effort started by Arjan van de Ven et al.

    Benefits of this constification:

    * prevents modification of data that is shared
    (referenced) by many other structure instances
    at runtime

    * detects/prevents accidental (but not intentional)
    modification attempts on archs that enforce
    read-only kernel data at runtime

    * potentially better optimized code as the compiler
    can assume that the const data cannot be changed

    * the compiler/linker move const data into .rodata
    and therefore exclude them from false sharing

    Signed-off-by: Emese Revfy
    Acked-by: David Teigland
    Acked-by: Matt Domsch
    Acked-by: Maciej Sosnowski
    Acked-by: Hans J. Koch
    Acked-by: Pekka Enberg
    Acked-by: Jens Axboe
    Acked-by: Stephen Hemminger
    Signed-off-by: Greg Kroah-Hartman

    Emese Revfy
     

16 Dec, 2009

1 commit


13 Nov, 2009

1 commit


12 Oct, 2009

1 commit


28 Sep, 2009

1 commit


19 Sep, 2009

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/lethal/sh-2.6: (262 commits)
    sh: mach-ecovec24: Add user debug switch support
    sh: Kill off unused se_skipped in alignment trap notification code.
    sh: Wire up HAVE_SYSCALL_TRACEPOINTS.
    video: sh_mobile_lcdcfb: use both register sets for display panning
    video: sh_mobile_lcdcfb: implement display panning
    sh: Fix up sh7705 flush_dcache_page() build.
    sh: kfr2r09: document the PLL/FLL RF relationship.
    sh: mach-ecovec24: need asm/clock.h.
    sh: mach-ecovec24: deassert usb irq on boot.
    sh: Add KEYSC support for EcoVec24
    sh: add kycr2_delay for sh_keysc
    sh: cpufreq: Include CPU id in info messages.
    sh: multi-evt support for SH-X3 proto CPU.
    sh: clkfwk: remove bogus set_bus_parent() from SH7709.
    sh: Fix the indication point of the liquid crystal of AP-325RXA(AP3300)
    sh: Add EcoVec24 romImage defconfig
    sh: USB disable process is needed if romImage boot for EcoVec24
    sh: EcoVec24: add HIZA setting for LED
    sh: EcoVec24: write MAC address in boot
    sh: Add romImage support for EcoVec24
    ...

    Linus Torvalds
     

16 Sep, 2009

2 commits

  • This adds a generic uio driver that can bind to any PCI device. First
    user will be virtualization where a qemu userspace process needs to give
    guest OS access to the device.

    Interrupts are handled using the Interrupt Disable bit in the PCI
    command register and Interrupt Status bit in the PCI status register.
    All devices compliant to PCI 2.3 (circa 2002) and all compliant PCI
    Express devices should support these bits. Driver detects this support,
    and won't bind to devices which do not support the Interrupt Disable Bit
    in the command register.

    It's expected that more features of interest to virtualization will be
    added to this driver in the future. Possibilities are: mmap for device
    resources, MSI/MSI-X, eventfd (to interface with kvm), iommu.

    Signed-off-by: Michael S. Tsirkin
    Acked-by: Chris Wright
    Signed-off-by: Hans J. Koch
    Acked-by: Jesse Barnes
    Signed-off-by: Greg Kroah-Hartman

    Michael S. Tsirkin
     
  • 'default n' is the default, there is no need for these lines.

    Signed-off-by: Daniel Mack
    Cc: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Daniel Mack
     

23 Aug, 2009

1 commit

  • This patch modifies the uio_pdrv_genirq driver to support
    Runtime PM. The power management implementation simply
    runtime resumes the device at open() time and runtime
    suspends it at release() time. The user space driver is
    responsible for re-initializing the hardware after open().

    Signed-off-by: Magnus Damm
    Signed-off-by: Paul Mundt

    Magnus Damm
     

17 Apr, 2009

1 commit

  • On Fri, Apr 10, 2009 at 01:50:50PM -0700, Andrew Morton wrote:
    > On Fri, 10 Apr 2009 13:32:01 GMT
    > bugzilla-daemon@bugzilla.kernel.org wrote:
    >
    > > http://bugzilla.kernel.org/show_bug.cgi?id=13059

    drivers/uio/uio_cif.c misses a MODULE_DEVICE_TABLE, this fixes it.

    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Hans J. Koch
     

25 Mar, 2009

3 commits

  • If a UIO memory region does not start on a page boundary but straddles one,
    the number of actual pages that overlap the memory region may be calculated
    incorrectly because the offset isn't taken into account. If userspace sets
    the mmap length to offset+size, it may fail with -EINVAL if UIO thinks it's
    trying to allocate too many pages.

    Signed-off-by: Ian Abbott
    Cc: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Ian Abbott
     
  • UIO driver for the Adrienne Electronics Corporation PCI time code
    device.

    This device differs from other UIO devices since it uses I/O ports instead of
    memory mapped I/O. In order to make it possible for UIO to work with this
    device a utility, uioport, can be used to read and write the ports.

    uioport is designed to be a setuid program and checks the permissions of
    the /dev/uio* node and if the user has write permissions it will use
    iopl and out*/in* to access the device.

    [1] git clone git://ifup.org/philips/uioport.git

    Signed-off-by: Brandon Philips
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Brandon Philips
     
  • If a UIO device has several memory mappings, it can be difficult for userspace
    to find the right one. The situation becomes even worse if the UIO driver can
    handle different versions of a card that have different numbers of mappings.
    Benedikt Spranger has such cards and pointed this out to me. Thanks, Bene!

    To address this problem, this patch adds "name" sysfs attributes for each
    mapping. Userspace can use these to clearly identify each mapping. The name
    string is optional. If a driver doesn't set it, an empty string will be
    returned, so this patch won't break existing drivers.

    The same problem exists for port region information, so a "name" attribute is
    added there, too.

    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Hans J. Koch
     

07 Jan, 2009

3 commits

  • Devices sometimes have memory where all or parts of it can not be mapped to
    userspace. But it might still be possible to access this memory from
    userspace by other means. An example are PCI cards that advertise not only
    mappable memory but also ioport ranges. On x86 architectures, these can be
    accessed with ioperm, iopl, inb, outb, and friends. Mike Frysinger (CCed)
    reported a similar problem on Blackfin arch where it doesn't seem to be easy
    to mmap non-cached memory but it can still be accessed from userspace.

    This patch allows kernel drivers to pass information about such ports to
    userspace. Similar to the existing mem[] array, it adds a port[] array to
    struct uio_info. Each port range is described by start, size, and porttype.

    If a driver fills in at least one such port range, the UIO core will simply
    pass this information to userspace by creating a new directory "portio"
    underneath /sys/class/uio/uioN/. Similar to the "mem" directory, it will
    contain a subdirectory (portX) for each port range given.

    Note that UIO simply passes this information to userspace, it performs no
    action whatsoever with this data. It's userspace's responsibility to obtain
    access to these ports and to solve arch dependent issues. The "porttype"
    attribute tells userspace what kind of port it is dealing with.

    This mechanism could also be used to give userspace information about GPIOs
    related to a device. You frequently find such hardware in embedded devices,
    so I added a UIO_PORT_GPIO definition. I'm not really sure if this is a good
    idea since there are other solutions to this problem, but it won't hurt much
    anyway.

    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Hans J. Koch
     
  • I can't think of a reason why the driver prevents people from setting any
    custom bits in their platform device, but I can think of some reasons for
    allowing custom flags. Like setting the IRQF_TRIGGER_... bits.

    Signed-off-by: Mike Frysinger
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Mike Frysinger
     
  • Use the newly introduced pci_ioremap_bar() function in drivers/uio.
    pci_ioremap_bar() just takes a pci device and a bar number, with the goal
    of making it really hard to get wrong, while also having a central place
    to stick sanity checks.

    Signed-off-by: Arjan van de Ven
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Arjan van de Ven
     

02 Nov, 2008

1 commit

  • As it is, all instances of ->release() for files that have ->fasync()
    need to remember to evict file from fasync lists; forgetting that
    creates a hole and we actually have a bunch that *does* forget.

    So let's keep our lives simple - let __fput() check FASYNC in
    file->f_flags and call ->fasync() there if it's been set. And lose that
    crap in ->release() instances - leaving it there is still valid, but we
    don't have to bother anymore.

    Signed-off-by: Al Viro
    Signed-off-by: Linus Torvalds

    Al Viro
     

21 Oct, 2008

1 commit


17 Oct, 2008

4 commits

  • Fill in needed locking around idr accesses, then remove the big kernel lock
    from the UIO driver. Since there are no in-tree UIO drivers with open()
    methods, no further BKL pushdown is required.

    Acked-by: Hans J. Koch
    Acked-by: Greg Kroah-Hartman
    Signed-off-by: Jonathan Corbet

    Jonathan Corbet
     
  • mmap() doesn't work as expected for UIO_MEM_LOGICAL or UIO_MEM_VIRTUAL
    mappings. The offset into the memory needs to be added, otherwise
    uio_vma_fault always returns the first page only. Note that for UIO
    userspace calls mmap() with offset = N * getpagesize() to access
    mapping N. This must be compensated when calculating the offset. A
    comment was added to explain this since it is not obvious.

    Signed-off-by: Andrew G. Harvey
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Andrew G. Harvey
     
  • Here is a new version of the patch to support the Automata Sercos III
    PCI card driver. I now check that the IRQ is enabled before accepting
    the interrupt.

    I still use a logical OR to store the enabled interrupts and I've
    added a second use of a logical OR when restoring the enabled
    interrupts. I added an explanation of why I do this in comments at the
    top of the source file.

    Since I use a logical OR, I also removed the extra checks if the
    Interrupt Enable Register and ier0_cache are 0.

    Signed-off-by: John Ogness
    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    John Ogness
     
  • The generic UIO platform device driver should be given a unique driver ID and
    not just "uio". This is especially important since we now have a similar driver
    named uio_pdrv_genirq. Currently, there's no user of this driver in the
    mainline kernel.

    Signed-off-by: Hans J. Koch
    Signed-off-by: Greg Kroah-Hartman

    Hans J. Koch