16 Jan, 2012

1 commit

  • * 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media: (655 commits)
    [media] revert patch: HDIC HD29L2 DMB-TH USB2.0 reference design driver
    mb86a20s: Add a few more register settings at the init seq
    mb86a20s: Group registers into the same line
    [media] [PATCH] don't reset the delivery system on DTV_CLEAR
    [media] [BUG] it913x-fe fix typo error making SNR levels unstable
    [media] cx23885: Query the CX25840 during enum_input for status
    [media] cx25840: Add support for g_input_status
    [media] rc-videomate-m1f.c Rename to match remote controler name
    [media] drivers: media: au0828: Fix dependency for VIDEO_AU0828
    [media] convert drivers/media/* to use module_platform_driver()
    [media] drivers: video: cx231xx: Fix dependency for VIDEO_CX231XX_DVB
    [media] Exynos4 JPEG codec v4l2 driver
    [media] doc: v4l: selection: choose pixels as units for selection rectangles
    [media] v4l: s5p-tv: mixer: fix setup of VP scaling
    [media] v4l: s5p-tv: mixer: add support for selection API
    [media] v4l: emulate old crop API using extended crop/compose API
    [media] doc: v4l: add documentation for selection API
    [media] doc: v4l: add binary images for selection API
    [media] v4l: add support for selection api
    [media] hd29l2: fix review findings
    ...

    Linus Torvalds
     

06 Jan, 2012

1 commit

  • We're doing some odd things there, which already messes up various users
    (see the net/socket.c code that this removes), and it was going to add
    yet more crud to the block layer because of the incorrect error code
    translation.

    ENOIOCTLCMD is not an error return that should be returned to user mode
    from the "ioctl()" system call, but it should *not* be translated as
    EINVAL ("Invalid argument"). It should be translated as ENOTTY
    ("Inappropriate ioctl for device").

    That EINVAL confusion has apparently so permeated some code that the
    block layer actually checks for it, which is sad. We continue to do so
    for now, but add a big comment about how wrong that is, and we should
    remove it entirely eventually. In the meantime, this tries to keep the
    changes localized to just the EINVAL -> ENOTTY fix, and removing code
    that makes it harder to do the right thing.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

01 Jan, 2012

1 commit

  • Only the ioctl core should see the DVBv3 compat stuff, as its
    contents are not available anymore to the drivers.

    As fs/compat_ioctl also handles DVBv3 ioctl's, it needs those
    definitions:

    fs/compat_ioctl.c:1345: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1345: error: array type has incomplete element type
    fs/compat_ioctl.c:1345: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1345: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1345: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1345: error: array type has incomplete element type
    fs/compat_ioctl.c:1345: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1345: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1345: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1345: error: array type has incomplete element type
    fs/compat_ioctl.c:1345: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1345: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1345: error: initializer element is not constant
    fs/compat_ioctl.c:1345: error: (near initialization for ‘ioctl_pointer[462]’)
    fs/compat_ioctl.c:1346: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1346: error: array type has incomplete element type
    fs/compat_ioctl.c:1346: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1346: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1346: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1346: error: array type has incomplete element type
    fs/compat_ioctl.c:1346: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1346: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1346: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1346: error: array type has incomplete element type
    fs/compat_ioctl.c:1346: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1346: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_parameters’
    fs/compat_ioctl.c:1346: error: initializer element is not constant
    fs/compat_ioctl.c:1346: error: (near initialization for ‘ioctl_pointer[463]’)
    fs/compat_ioctl.c:1347: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_event’
    fs/compat_ioctl.c:1347: error: array type has incomplete element type
    fs/compat_ioctl.c:1347: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_event’
    fs/compat_ioctl.c:1347: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_event’
    fs/compat_ioctl.c:1347: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_event’
    fs/compat_ioctl.c:1347: error: array type has incomplete element type
    fs/compat_ioctl.c:1347: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_event’
    fs/compat_ioctl.c:1347: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_event’
    fs/compat_ioctl.c:1347: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_event’
    fs/compat_ioctl.c:1347: error: array type has incomplete element type
    fs/compat_ioctl.c:1347: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_event’
    fs/compat_ioctl.c:1347: error: invalid application of ‘sizeof’ to incomplete type ‘struct dvb_frontend_event’
    fs/compat_ioctl.c:1347: error: initializer element is not constant
    fs/compat_ioctl.c:1347: error: (near initialization for ‘ioctl_pointer[464]’)

    Reported-by: Michael Krufky
    Signed-off-by: Mauro Carvalho Chehab

    Mauro Carvalho Chehab
     

08 Aug, 2011

1 commit

  • fixes following error seen on x86_64 kernel:
    ioctl32(openl2tpd:7480): Unknown cmd fd(14) cmd(80487436){t:'t';sz:72} arg(ffa7e6c0) on socket:[105094]

    The argument (struct pppol2tp_ioc_stats) uses "aligned_u64" and thus doesn't need
    fixups.

    Cc: James Chapman
    Cc: Alexander Viro
    Cc: linux-fsdevel@vger.kernel.org
    Signed-off-by: Florian Westphal
    Signed-off-by: David S. Miller

    Florian Westphal
     

02 Jul, 2011

1 commit

  • On Linux x86_64 host with 32bit userspace, running
    qemu or even just "qemu-img create -f qcow2 some.img 1G"
    causes a kernel warning:

    ioctl32(qemu-img:5296): Unknown cmd fd(3) cmd(00005326){t:'S';sz:0} arg(7fffffff) on some.img
    ioctl32(qemu-img:5296): Unknown cmd fd(3) cmd(801c0204){t:02;sz:28} arg(fff77350) on some.img

    ioctl 00005326 is CDROM_DRIVE_STATUS,
    ioctl 801c0204 is FDGETPRM.

    The warning appears because the Linux compat-ioctl handler for these
    ioctls only applies to block devices, while qemu also uses the ioctls on
    plain files.

    Signed-off-by: Johannes Stezenbach
    Acked-by: Arnd Bergmann
    Signed-off-by: Jens Axboe

    Johannes Stezenbach
     

08 Jan, 2011

1 commit

  • * 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6: (36 commits)
    serial: apbuart: Fixup apbuart_console_init()
    TTY: Add tty ioctl to figure device node of the system console.
    tty: add 'active' sysfs attribute to tty0 and console device
    drivers: serial: apbuart: Handle OF failures gracefully
    Serial: Avoid unbalanced IRQ wake disable during resume
    tty: fix typos/errors in tty_driver.h comments
    pch_uart : fix warnings for 64bit compile
    8250: fix uninitialized FIFOs
    ip2: fix compiler warning on ip2main_pci_tbl
    specialix: fix compiler warning on specialix_pci_tbl
    rocket: fix compiler warning on rocket_pci_ids
    8250: add a UPIO_DWAPB32 for 32 bit accesses
    8250: use container_of() instead of casting
    serial: omap-serial: Add support for kernel debugger
    serial: fix pch_uart kconfig & build
    drivers: char: hvc: add arm JTAG DCC console support
    RS485 documentation: add 16C950 UART description
    serial: ifx6x60: fix memory leak
    serial: ifx6x60: free IRQ on error
    Serial: EG20T: add PCH_UART driver
    ...

    Fixed up conflicts in drivers/serial/apbuart.c with evil merge that
    makes the code look fairly sane (unlike either side).

    Linus Torvalds
     

29 Dec, 2010

1 commit


17 Dec, 2010

1 commit


18 Nov, 2010

1 commit


29 Oct, 2010

1 commit


19 Oct, 2010

1 commit

  • RAW_SETBIND and RAW_GETBIND 32bit versions are fscked in interesting ways.

    1) fs/compat_ioctl.c has COMPATIBLE_IOCTL(RAW_SETBIND) followed by
    HANDLE_IOCTL(RAW_SETBIND, raw_ioctl). The latter is ignored.

    2) on amd64 (and itanic) the damn thing is broken - we have int + u64 + u64
    and layouts on i386 and amd64 are _not_ the same. raw_ioctl() would
    work there, but it's never called due to (1). As it is, i386 /sbin/raw
    definitely doesn't work on amd64 boxen.

    3) switching to raw_ioctl() as is would *not* work on e.g. sparc64 and ppc64,
    which would be rather sad, seeing that normal userland there is 32bit.
    The thing is, slapping __packed on the struct in question does not DTRT -
    it eliminates *all* padding. The real solution is to use compat_u64.

    4) of course, all that stuff has no business being outside of raw.c in the
    first place - there should be ->compat_ioctl() for /dev/rawctl instead of
    messing with compat_ioctl.c.

    [akpm@linux-foundation.org: coding-style fixes]
    [arnd@arndb.de: port to 2.6.36]
    Signed-off-by: Al Viro
    Signed-off-by: Andrew Morton
    Signed-off-by: Arnd Bergmann

    Al Viro
     

06 Oct, 2010

1 commit

  • smbfs has been scheduled for removal in 2.6.27, so
    maybe we can now move it to drivers/staging on the
    way out.

    smbfs still uses the big kernel lock and nobody
    is going to fix that, so we should be getting
    rid of it soon.

    This removes the 32 bit compat mount and ioctl
    handling code, which is implemented in common fs
    code, and moves all smbfs related files into
    drivers/staging/smbfs.

    Signed-off-by: Arnd Bergmann
    Acked-by: Jeff Layton
    Signed-off-by: Greg Kroah-Hartman

    Arnd Bergmann
     

14 Aug, 2010

1 commit


11 Aug, 2010

2 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6: (68 commits)
    U6715 16550A serial driver support
    Char: nozomi, set tty->driver_data appropriately
    Char: nozomi, fix tty->count counting
    serial: max3107: Fix gpiolib support
    hsu: call PCI pm hooks in suspend/resume function
    hsu: some code cleanup
    hsu: add a periodic timer to check dma rx channel
    hsu: driver for Medfield High Speed UART device
    mxser: remove unnesesary NULL check
    serial: add support for OX16PCI958 card
    serial: 68328serial.c: remove dead (ALMA_ANS | DRAGONIXVZ | M68EZ328ADS)
    timbuart: use __devinit and __devexit macros for probe and remove
    serial: MMIO32 support for 8250_early.c
    serial: mcf: don't take spinlocks in already protected functions
    serial: general fixes in the serial_rs485 structure
    serial: fix missing bit coverage of ASYNC_FLAGS
    serial: "altera_uart: simplify altera_uart_console_putc()" checkpatch fixes
    serial: crisv10: formatting of pointers in printk()
    vt: Fix warning: statement with no effect due to vt_kern.h
    tty_io: remove casts from void*
    ...

    Linus Torvalds
     
  • This patch is against the 2.6.34 source.

    Paraphrased from the 1989 BSD patch by David Borman @ cray.com:

    These are the changes needed for the kernel to support
    LINEMODE in the server.

    There is a new bit in the termios local flag word, EXTPROC.
    When this bit is set, several aspects of the terminal driver
    are disabled. Input line editing, character echo, and mapping
    of signals are all disabled. This allows the telnetd to turn
    off these functions when in linemode, but still keep track of
    what state the user wants the terminal to be in.

    New ioctl:
    TIOCSIG Generate a signal to processes in the
    current process group of the pty.

    There is a new mode for packet driver, the TIOCPKT_IOCTL bit.
    When packet mode is turned on in the pty, and the EXTPROC bit
    is set, then whenever the state of the pty is changed, the
    next read on the master side of the pty will have the TIOCPKT_IOCTL
    bit set. This allows the process on the server side of the pty
    to know when the state of the terminal has changed; it can then
    issue the appropriate ioctl to retrieve the new state.

    Since the original BSD patches accompanied the source code for telnet
    I've left that reference here, but obviously the feature is useful for
    any remote terminal protocol, including ssh.

    The corresponding feature has existed in the BSD tty driver since 1989.
    For historical reference, a good copy of the relevant files can be found
    here:

    http://anonsvn.mit.edu/viewvc/krb5/trunk/src/appl/telnet/?pathrev=17741

    Signed-off-by: Howard Chu
    Cc: Alan Cox
    Signed-off-by: Greg Kroah-Hartman

    hyc@symas.com
     

09 Aug, 2010

2 commits


05 Aug, 2010

1 commit

  • * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial: (48 commits)
    Documentation: update broken web addresses.
    fix comment typo "choosed" -> "chosen"
    hostap:hostap_hw.c Fix typo in comment
    Fix spelling contorller -> controller in comments
    Kconfig.debug: FAIL_IO_TIMEOUT: typo Faul -> Fault
    fs/Kconfig: Fix typo Userpace -> Userspace
    Removing dead MACH_U300_BS26
    drivers/infiniband: Remove unnecessary casts of private_data
    fs/ocfs2: Remove unnecessary casts of private_data
    libfc: use ARRAY_SIZE
    scsi: bfa: use ARRAY_SIZE
    drm: i915: use ARRAY_SIZE
    drm: drm_edid: use ARRAY_SIZE
    synclink: use ARRAY_SIZE
    block: cciss: use ARRAY_SIZE
    comment typo fixes: charater => character
    fix comment typos concerning "challenge"
    arm: plat-spear: fix typo in kerneldoc
    reiserfs: typo comment fix
    update email address
    ...

    Linus Torvalds
     

22 Jul, 2010

3 commits


19 Jul, 2010

1 commit


29 Apr, 2010

1 commit

  • The pktcdvd driver uses proper locking and does not need the BKL in the
    ioctl and llseek functions of the character device, so kill both.

    Moving the compat_ioctl handling from common code into the driver itself
    fixes build problems when CONFIG_BLOCK is disabled.

    Acked-by: Randy Dunlap
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Linus Torvalds

    Arnd Bergmann
     

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
     

07 Mar, 2010

1 commit

  • fs/compat_ioctl.c: In function 'do_ioctl_trans':
    fs/compat_ioctl.c:534: warning: 'karg' may be used uninitialized in this function
    fs/compat_ioctl.c:533: warning: 'kcmd' may be used uninitialized in this function
    fs/compat_ioctl.c:656: warning: 'ret' may be used uninitialized in this function

    Reduces text size by 44 bytes.

    If someone calls one of these functions with an unexpected argument, the
    code's buggy as-is.

    Amerigo Wang
    Cc: Alexander Viro
    Acked-by: Arnd Bergmann
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

12 Feb, 2010

2 commits


10 Feb, 2010

1 commit

  • md ioctls are now handled by the md driver itself, but mdadm
    may call RAID_VERSION on other devices as well. Mark the command
    as IGNORE_IOCTL so this fails silently rather than printing
    an annoying message.

    Reported-by: "Michael S. Tsirkin"
    Cc: "Rafael J. Wysocki"
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Linus Torvalds

    Arnd Bergmann
     

09 Feb, 2010

1 commit

  • bsg's SG_IO doesn't work on 32-bit userspace and 64-bit kernelspace.

    The problem is that both sg and bsg drivers use SG_IO
    ioctl. sg_ioctl_trans() does 32/64-bit conversion even against bsg
    header. It messes up bsg header. bsg driver gets garbage.

    This patch fixes sg_ioctl_trans to handle only sg header (struct
    sg_io_hdr).

    Reported-by: Giridhar Malavali
    Signed-off-by: FUJITA Tomonori
    Signed-off-by: James Bottomley

    FUJITA Tomonori
     

21 Jan, 2010

1 commit

  • After the commit fb07a5f8 ("compat_ioctl: remove all VT ioctl
    handling"), I got this error message on 64-bit mips kernel with 32-bit
    busybox userland:

    ioctl32(init:1): Unknown cmd fd(0) cmd(00005600){t:'V';sz:0} arg(7fd76480) on /dev/console

    The cmd 5600 is VT_OPENQRY. The busybox's init issues this ioctl to
    know vt-console or serial-console. If the console was serial console,
    VT ioctls are not handled by the serial driver.

    And by quick search, I found some programs using VT_GETMODE to check
    vt-console is available or not.

    Signed-off-by: Atsushi Nemoto
    Cc: Arnd Bergmann
    Signed-off-by: Greg Kroah-Hartman

    Atsushi Nemoto
     

23 Dec, 2009

1 commit

  • No driver uses SG_SET_TRANSFORM any more in Linux, since the ide-scsi
    driver was removed in 2.6.29. The compat-ioctl cleanup series moved
    the handling for this around, which broke building without CONFIG_BLOCK.

    Just remove the code handling it for compat mode.

    Signed-off-by: Al Viro

    Arnd Bergmann
     

14 Dec, 2009

1 commit


11 Dec, 2009

8 commits

  • Half the compat_ioctl handling is in devio.c, the other
    half is in fs/compat_ioctl.c. This moves everything into
    one place for consistency.

    As a positive side-effect, push down the BKL into the
    ioctl methods.

    Signed-off-by: Arnd Bergmann
    Acked-by: Greg Kroah-Hartman
    Cc: Alan Stern
    Cc: Oliver Neukum
    Cc: Alon Bar-Lev
    Cc: David Vrabel
    Cc: linux-usb@vger.kernel.org

    Arnd Bergmann
     
  • Handling for LPSETTIMEOUT can easily be done in lp_ioctl, which
    is the only user. As a positive side-effect, push the BKL
    into the ioctl methods.

    Signed-off-by: Arnd Bergmann
    Acked-by: Greg Kroah-Hartman

    Arnd Bergmann
     
  • Instead of having each handler call compat_ptr, we can now
    convert the pointer once and pass that to each handler.
    This saves a little bit of both source and object code size.

    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The compat_ioctl table now only contains entries for
    COMPATIBLE_IOCTL, so we only need to know if a number
    is listed in it or now.

    As an optimization, we hash the table entries with a
    reversible transformation to get a more uniform distribution
    over it, sort the table at startup and then guess the
    position in the table when an ioctl number gets called
    to do a linear search from there.

    With the current set of ioctl numbers and the chosen
    transformation function, we need an average of four
    steps to find if a number is in the set, all of the
    accesses within one or two cache lines.

    This at least as good as the previous hash table
    approach but saves 8.5 kb of kernel memory.

    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • The compat_ioctl array now contains only entries for ioctl numbers
    that do not require a separate handler. By special-casing the
    ULONG_IOCTL case in the do_ioctl_trans function, we can kill the
    final use of a function pointer in the array.

    text data bss dec hex filename
    7539 13352 2080 22971 59bb before/fs/compat_ioctl.o
    7910 8552 2080 18542 486e after/fs/compat_ioctl.o

    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • This makes all ioctl conversion handlers called from
    a single switch statement, leaving only COMPATIBLE_IOCTL
    and ULONG_IOCTL statements in the table. This is somewhat
    more space efficient and also lets us simplify the
    handling of the lookup table significantly.

    before:
    text data bss dec hex filename
    7619 14024 2080 23723 5cab obj/fs/compat_ioctl.o
    after:
    7567 13352 2080 22999 59d7 obj/fs/compat_ioctl.o

    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • We have always called ioctl conversion handlers under the big kernel lock,
    although that is generally not necessary. In particular it is not needed
    for conversion of data structures and for calling sys_ioctl or
    do_vfs_ioctl, which will get the BKL again if needed.

    Handlers doing more than those two have been moved out, so we can kill off
    the BKL from compat_sys_ioctl. This may significantly improve latencies
    with 32 bit applications, and it avoids a common scenario where a thread
    acquires the BKL twice.

    Signed-off-by: Arnd Bergmann
    Cc: Greg Kroah-Hartman
    Signed-off-by: Andrew Morton

    Arnd Bergmann
     
  • The VT driver now handles all of these ioctls directly, so we can remove
    the handlers from common code.

    These are the only handlers that require the BKL because they directly
    perform the ioctl action rather than just converting the data structures.
    Once they are gone, we can remove the BKL from the remaining ioctl
    conversion handlers.

    Signed-off-by: Arnd Bergmann
    Acked-by: Greg Kroah-Hartman
    Signed-off-by: Andrew Morton

    Arnd Bergmann