15 Dec, 2010

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
    sparc: Write to prom console using indirect buffer.
    sparc: Delete prom_*getchar().
    sparc: Pass buffer pointer all the way down to prom_{get,put}char().
    sparc: Do not export prom_nb{get,put}char().
    sparc64: Delete prom_setcallback().
    sparc64: Unexport prom_service_exists().
    sparc: Kill prom devops_{32,64}.c
    sparc: Remove prom_pathtoinode()
    sparc64: Delete prom_puts() unused.
    SPARC/LEON: removed constant timer initialization as if HZ=100, now it reflects the value of HZ

    Linus Torvalds
     

01 Dec, 2010

3 commits

  • sparc64 systems have a restriction in that passing in buffer
    addressses above 4GB to prom calls is not reliable.

    We end up violating this when we do prom console writes, because we
    use an on-stack buffer to translate '\n' into '\r\n'.

    So instead, do this translation into an intermediate buffer, which is
    in the kernel image and thus below 4GB, then pass that to the PROM
    console write calls.

    On the 32-bit side we don't have to deal with any of these issues, so
    the new prom_console_write_buf() uses the existing prom_nbputchar()
    implementation. However we can now mark those routines static.

    Since the 64-bit side completely uses new code we can delete the
    putchar bits as they are now completely unused.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Completely unused.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • This gets us closer to being able to eliminate the use
    of dynamic and stack based buffers, so that we can adhere
    to the "no buffer addresses above 4GB" rule for PROM calls.

    Signed-off-by: David S. Miller

    David S. Miller
     

18 Nov, 2010

2 commits


17 Nov, 2010

5 commits


31 Oct, 2010

1 commit

  • …nel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

    * 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    jump label: Add work around to i386 gcc asm goto bug
    x86, ftrace: Use safe noops, drop trap test
    jump_label: Fix unaligned traps on sparc.
    jump label: Make arch_jump_label_text_poke_early() optional
    jump label: Fix error with preempt disable holding mutex
    oprofile: Remove deprecated use of flush_scheduled_work()
    oprofile: Fix the hang while taking the cpu offline
    jump label: Fix deadlock b/w jump_label_mutex vs. text_mutex
    jump label: Fix module __init section race

    * 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    x86: Check irq_remapped instead of remapping_enabled in destroy_irq()

    Linus Torvalds
     

30 Oct, 2010

2 commits


29 Oct, 2010

2 commits

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
    kbuild: add ARCH=sparc32 target
    sparc32: fix build failure on CONFIG_SPARC_LEON
    sparc: Fixed random SPARC/LEON SMP CPU Stuck problem.
    sparc32: remove CONFIG_HAVE_PERF_EVENTS option
    sparc: don't #include asm/system.h in asm/jump_label.h
    sparc32: Fix unaligned stack handling on trap return.
    sparc: keep calling do_signal() as long as pending signals remain

    Linus Torvalds
     
  • * 'kconfig' of git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6: (38 commits)
    kbuild: convert `arch/tile' to the kconfig mainmenu upgrade
    README: cite nconfig
    Revert "kconfig: Temporarily disable dependency warnings"
    kconfig: Use PATH_MAX instead of 128 for path buffer sizes.
    kconfig: Fix realloc usage()
    kconfig: Propagate const
    kconfig: Don't go out from read config loop when you read new symbol
    kconfig: fix menuconfig on debian lenny
    kbuild: migrate all arch to the kconfig mainmenu upgrade
    kconfig: expand file names
    kconfig: use the file's name of sourced file
    kconfig: constify file name
    kconfig: don't emit warning upon rootmenu's prompt redefinition
    kconfig: replace KERNELVERSION usage by the mainmenu's prompt
    kconfig: delay gconf window initialization
    kconfig: expand by default the rootmenu's prompt
    kconfig: add a symbol string expansion helper
    kconfig: regen parser
    kconfig: implement the `mainmenu' directive
    kconfig: allow PACKAGE to be defined on the compiler's command-line
    ...

    Fix up trivial conflict in arch/mn10300/Kconfig

    Linus Torvalds
     

28 Oct, 2010

5 commits

  • dma64_addr_t looks pointless (at least there is no point that an
    architecture has the own dma64_addr_t typedef).

    dma_addr_t is set to 32 or 64 bits appropriately. You can use u64
    at places where you know that 64 bit address is always necessary.

    Let's use u64 instead for sparc32.

    Looks like PCI654_REQUIRED_MASK or PCI64_ADR_BASE isn't used. They can
    be removed?

    Signed-off-by: FUJITA Tomonori
    Acked-by: David Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    FUJITA Tomonori
     
  • Factor out struct fps and remove redundant castings.

    Signed-off-by: Namhyung Kim
    Acked-by: David S. Miller
    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
     
  • 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
     
  • Christoph reported a nice splat which illustrated a race in the new stack
    based kmap_atomic implementation.

    The problem is that we pop our stack slot before we're completely done
    resetting its state -- in particular clearing the PTE (sometimes that's
    CONFIG_DEBUG_HIGHMEM). If an interrupt happens before we actually clear
    the PTE used for the last slot, that interrupt can reuse the slot in a
    dirty state, which triggers a BUG in kmap_atomic().

    Fix this by introducing kmap_atomic_idx() which reports the current slot
    index without actually releasing it and use that to find the PTE and delay
    the _pop() until after we're completely done.

    Signed-off-by: Peter Zijlstra
    Reported-by: Christoph Hellwig
    Acked-by: Rik van Riel
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     

27 Oct, 2010

6 commits

  • Since we no longer need to provide KM_type, the whole pte_*map_nested()
    API is now redundant, remove it.

    Signed-off-by: Peter Zijlstra
    Acked-by: Chris Metcalf
    Cc: David Howells
    Cc: Hugh Dickins
    Cc: Rik van Riel
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Steven Rostedt
    Cc: Russell King
    Cc: Ralf Baechle
    Cc: David Miller
    Cc: Paul Mackerras
    Cc: Benjamin Herrenschmidt
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     
  • Keep the current interface but ignore the KM_type and use a stack based
    approach.

    The advantage is that we get rid of crappy code like:

    #define __KM_PTE \
    (in_nmi() ? KM_NMI_PTE : \
    in_irq() ? KM_IRQ_PTE : \
    KM_PTE0)

    and in general can stop worrying about what context we're in and what kmap
    slots might be appropriate for that.

    The downside is that FRV kmap_atomic() gets more expensive.

    For now we use a CPP trick suggested by Andrew:

    #define kmap_atomic(page, args...) __kmap_atomic(page)

    to avoid having to touch all kmap_atomic() users in a single patch.

    [ not compiled on:
    - mn10300: the arch doesn't actually build with highmem to begin with ]

    [akpm@linux-foundation.org: coding-style fixes]
    [akpm@linux-foundation.org: fix up drivers/gpu/drm/i915/intel_overlay.c]
    Acked-by: Rik van Riel
    Signed-off-by: Peter Zijlstra
    Acked-by: Chris Metcalf
    Cc: David Howells
    Cc: Hugh Dickins
    Cc: Ingo Molnar
    Cc: Thomas Gleixner
    Cc: "H. Peter Anvin"
    Cc: Steven Rostedt
    Cc: Russell King
    Cc: Ralf Baechle
    Cc: David Miller
    Cc: Paul Mackerras
    Cc: Benjamin Herrenschmidt
    Cc: Dave Airlie
    Cc: Li Zefan
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     
  • CC arch/sparc/kernel/irq_32.o
    arch/sparc/kernel/irq_32.c: In function 'request_fast_irq':
    arch/sparc/kernel/irq_32.c:370:25: error: conflicting types for 'trapbase_cpu1'
    arch/sparc/include/asm/leon.h:366:22: note: previous declaration of 'trapbase_cpu1' was here
    arch/sparc/kernel/irq_32.c:370:40: error: conflicting types for 'trapbase_cpu2'
    arch/sparc/include/asm/leon.h:367:22: note: previous declaration of 'trapbase_cpu2' was here
    arch/sparc/kernel/irq_32.c:370:55: error: conflicting types for 'trapbase_cpu3'
    arch/sparc/include/asm/leon.h:368:22: note: previous declaration of 'trapbase_cpu3' was here
    make[3]: *** [arch/sparc/kernel/irq_32.o] Error 1
    make[2]: *** [arch/sparc/kernel] Error 2
    make[1]: *** [sub-make] Error 2
    make: *** [all] Error 2

    Signed-off-by: Namhyung Kim
    Signed-off-by: David S. Miller

    Namhyung Kim
     
  • Signed-off-by: Daniel Hellstrom
    Signed-off-by: David S. Miller

    Daniel Hellstrom
     
  • Remove HAVE_PERF_EVENTS and PERF_USE_VMALLOC under config
    SPARC because they're under SPARC64 too. Supporting
    perf_event needs atomic64 operations but AFAIK sparc32
    doesn't provide them, CMIIW. ;-) Also removes redundant
    HAVE_IRQ_WORK line.

    Signed-off-by: Namhyung Kim
    Signed-off-by: David S. Miller

    Namhyung Kim
     
  • It seems that #include makes a circular dependency
    between kernel.h and bitmap.h which breaks allmodconfig build.
    Removing the line makes no change because jump_label.h doesn't
    need it actually AFAICS. Compile tested on sparc32 allmodconfig.

    Signed-off-by: Namhyung Kim
    Signed-off-by: David S. Miller

    Namhyung Kim
     

26 Oct, 2010

2 commits

  • When the rett stack checking code sees the stack is unaligned (in both
    the sun4c and srmmu cases) it jumps to the window fault-in path.

    But that just tries to page the stack pages in, it doesn't do anything
    special if the stack is misaligned.

    Therefore we essentially just loop forever in the trap return path.

    Fix this by emitting a SIGILL in the stack fault-in code if the stack
    is mis-aligned.

    Reported-by: Al Viro
    Signed-off-by: David S. Miller

    David S. Miller
     
  • Analog of what commit 494486a1d2697f2153199b6501ab5b4d6e15a2bb had done
    to alpha (another architecture with similar bug).

    One note: in rtrap_32.S part clr %l6 has been a rudiment of left after
    commit 28e6103665301ce60634e8a77f0b657c6cc099de (sparc: Fix debugger syscall
    restart interactions) has killed %l6 use in there.

    Signed-off-by: Al Viro
    Signed-off-by: David S. Miller

    Al Viro
     

25 Oct, 2010

1 commit

  • * 'next-devicetree' of git://git.secretlab.ca/git/linux-2.6:
    mtd/m25p80: add support to parse the partitions by OF node
    of/irq: of_irq.c needs to include linux/irq.h
    of/mips: Cleanup some include directives/files.
    of/mips: Add device tree support to MIPS
    of/flattree: Eliminate need to provide early_init_dt_scan_chosen_arch
    of/device: Rework to use common platform_device_alloc() for allocating devices
    of/xsysace: Fix OF probing on little-endian systems
    of: use __be32 types for big-endian device tree data
    of/irq: remove references to NO_IRQ in drivers/of/platform.c
    of/promtree: add package-to-path support to pdt
    of/promtree: add of_pdt namespace to pdt code
    of/promtree: no longer call prom_ functions directly; use an ops structure
    of/promtree: make drivers/of/pdt.c no longer sparc-only
    sparc: break out some PROM device-tree building code out into drivers/of
    of/sparc: convert various prom_* functions to use phandle
    sparc: stop exporting openprom.h header
    powerpc, of_serial: Endianness issues setting up the serial ports
    of: MTD: Fix OF probing on little-endian systems
    of: GPIO: Fix OF probing on little-endian systems

    Linus Torvalds
     

23 Oct, 2010

1 commit

  • * 'llseek' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd/bkl:
    vfs: make no_llseek the default
    vfs: don't use BKL in default_llseek
    llseek: automatically add .llseek fop
    libfs: use generic_file_llseek for simple_attr
    mac80211: disallow seeks in minstrel debug code
    lirc: make chardev nonseekable
    viotape: use noop_llseek
    raw: use explicit llseek file operations
    ibmasmfs: use generic_file_llseek
    spufs: use llseek in all file operations
    arm/omap: use generic_file_llseek in iommu_debug
    lkdtm: use generic_file_llseek in debugfs
    net/wireless: use generic_file_llseek in debugfs
    drm: use noop_llseek

    Linus Torvalds
     

22 Oct, 2010

3 commits

  • …nel/git/tip/linux-2.6-tip

    * 'core-memblock-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (74 commits)
    x86-64: Only set max_pfn_mapped to 512 MiB if we enter via head_64.S
    xen: Cope with unmapped pages when initializing kernel pagetable
    memblock, bootmem: Round pfn properly for memory and reserved regions
    memblock: Annotate memblock functions with __init_memblock
    memblock: Allow memblock_init to be called early
    memblock/arm: Fix memblock_region_is_memory() typo
    x86, memblock: Remove __memblock_x86_find_in_range_size()
    memblock: Fix wraparound in find_region()
    x86-32, memblock: Make add_highpages honor early reserved ranges
    x86, memblock: Fix crashkernel allocation
    arm, memblock: Fix the sparsemem build
    memblock: Fix section mismatch warnings
    powerpc, memblock: Fix memblock API change fallout
    memblock, microblaze: Fix memblock API change fallout
    x86: Remove old bootmem code
    x86, memblock: Use memblock_memory_size()/memblock_free_memory_size() to get correct dma_reserve
    x86: Remove not used early_res code
    x86, memblock: Replace e820_/_early string with memblock_
    x86: Use memblock to replace early_res
    x86, memblock: Use memblock_debug to control debug message print out
    ...

    Fix up trivial conflicts in arch/x86/kernel/setup.c and kernel/Makefile

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-2.6-irqflags:
    Fix IRQ flag handling naming
    MIPS: Add missing #inclusions of
    smc91x: Add missing #inclusion of
    Drop a couple of unnecessary asm/system.h inclusions
    SH: Add missing consts to sys_execve() declaration
    Blackfin: Rename IRQ flags handling functions
    Blackfin: Add missing dep to asm/irqflags.h
    Blackfin: Rename DES PC2() symbol to avoid collision
    Blackfin: Split the BF532 BFIN_*_FIO_FLAG() functions to their own header
    Blackfin: Split PLL code from mach-specific cdef headers

    Linus Torvalds
     
  • * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (96 commits)
    apic, x86: Use BIOS settings for IBS and MCE threshold interrupt LVT offsets
    apic, x86: Check if EILVT APIC registers are available (AMD only)
    x86: ioapic: Call free_irte only if interrupt remapping enabled
    arm: Use ARCH_IRQ_INIT_FLAGS
    genirq, ARM: Fix boot on ARM platforms
    genirq: Fix CONFIG_GENIRQ_NO_DEPRECATED=y build
    x86: Switch sparse_irq allocations to GFP_KERNEL
    genirq: Switch sparse_irq allocator to GFP_KERNEL
    genirq: Make sparse_lock a mutex
    x86: lguest: Use new irq allocator
    genirq: Remove the now unused sparse irq leftovers
    genirq: Sanitize dynamic irq handling
    genirq: Remove arch_init_chip_data()
    x86: xen: Sanitise sparse_irq handling
    x86: Use sane enumeration
    x86: uv: Clean up the direct access to irq_desc
    x86: Make io_apic.c local functions static
    genirq: Remove irq_2_iommu
    x86: Speed up the irq_remapped check in hot pathes
    intr_remap: Simplify the code further
    ...

    Fix up trivial conflicts in arch/x86/Kconfig

    Linus Torvalds
     

19 Oct, 2010

1 commit

  • Provide a mechanism that allows running code in IRQ context. It is
    most useful for NMI code that needs to interact with the rest of the
    system -- like wakeup a task to drain buffers.

    Perf currently has such a mechanism, so extract that and provide it as
    a generic feature, independent of perf so that others may also
    benefit.

    The IRQ context callback is generated through self-IPIs where
    possible, or on architectures like powerpc the decrementer (the
    built-in timer facility) is set to generate an interrupt immediately.

    Architectures that don't have anything like this get to do with a
    callback from the timer tick. These architectures can call
    irq_work_run() at the tail of any IRQ handlers that might enqueue such
    work (like the perf IRQ handler) to avoid undue latencies in
    processing the work.

    Signed-off-by: Peter Zijlstra
    Acked-by: Kyle McMartin
    Acked-by: Martin Schwidefsky
    [ various fixes ]
    Signed-off-by: Huang Ying
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Peter Zijlstra
     

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
     

13 Oct, 2010

3 commits

  • For symbols still lacking namespace qualifiers, add an of_pdt_ prefix.

    Signed-off-by: Andres Salomon
    Acked-by: David S. Miller
    Signed-off-by: Grant Likely

    Andres Salomon
     
  • Rather than assuming an architecture defines prom_getchild and friends,
    define an ops struct with hooks for the various prom functions that
    pdt.c needs. This ops struct is filled in by the
    arch-(and sometimes firmware-)specific code, and passed to
    of_pdt_build_devicetree.

    Update sparc code to define the ops struct as well.

    Signed-off-by: Andres Salomon
    Acked-by: David S. Miller
    Signed-off-by: Grant Likely

    Andres Salomon
     
  • We need to round memory regions correctly -- specifically, we need to
    round reserved region in the more expansive direction (lower limit
    down, upper limit up) whereas usable memory regions need to be rounded
    in the more restrictive direction (lower limit up, upper limit down).

    This introduces two set of inlines:

    memblock_region_memory_base_pfn()
    memblock_region_memory_end_pfn()
    memblock_region_reserved_base_pfn()
    memblock_region_reserved_end_pfn()

    Although they are antisymmetric (and therefore are technically
    duplicates) the use of the different inlines explicitly documents the
    programmer's intention.

    The lack of proper rounding caused a bug on ARM, which was then found
    to also affect other architectures.

    Reported-by: Russell King
    Signed-off-by: Yinghai Lu
    LKML-Reference:
    Cc: Jeremy Fitzhardinge
    Signed-off-by: H. Peter Anvin

    Yinghai Lu
     

12 Oct, 2010

1 commit