07 Jul, 2008

4 commits

  • They print out a pointer in symbolic format, if possible (ie using
    symbolic KALLSYMS information). The '%pS' format is for regular direct
    pointers (which can point to data or code and that you find on the stack
    during backtraces etc), while '%pF' is for C function pointer types.

    On most architectures, the two mean exactly the same thing, but some
    architectures use an indirect pointer for C function pointers, where the
    function pointer points to a function descriptor (which in turn contains
    the actual pointer to the code). The '%pF' code automatically does the
    appropriate function descriptor dereference on such architectures.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • This expands the kernel '%p' handling with an arbitrary alphanumberic
    specifier extension string immediately following the '%p'. Right now
    it's just being ignored, but the next commit will start adding some
    specific pointer type extensions.

    NOTE! The reason the extension is appended to the '%p' is to allow
    minimal gcc type checking: gcc will still see the '%p' and will check
    that the argument passed in is indeed a pointer, and yet will not
    complain about the extended information that gcc doesn't understand
    about (on the other hand, it also won't actually check that the pointer
    type and the extension are compatible).

    Alphanumeric characters were chosen because there is no sane existing
    use for a string format with a hex pointer representation immediately
    followed by alphanumerics (which is what such a format string would have
    traditionally resulted in).

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • The actual code is the same, just split out into a helper function.
    This makes it easier to read, and allows for simple future extension
    of %p handling.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • The actual code is the same, just split out into a helper function.
    This makes it easier to read, and allows for future sharing of the
    string code.

    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

05 Jul, 2008

2 commits

  • Commit 95b570c9cef3b12356454c7112571b7e406b4b51 ("Taint kernel after
    WARN_ON(condition)") introduced a TAINT_WARN that was implemented for
    all architectures using the generic warn_on_slowpath(), which excluded
    any architecture that set HAVE_ARCH_WARN_ON.

    As all of the architectures that implement their own WARN_ON() all go
    through the report_bug() path (specifically handling BUG_TRAP_TYPE_WARN),
    taint the kernel there as well for consistency.

    Tested on avr32 and sh. Also relevant for s390, parisc, and powerpc.

    Signed-off-by: Haavard Skinnemoen
    Signed-off-by: Paul Mundt
    Acked-by: Kyle McMartin
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Paul Mundt
     
  • Remove all clameter@sgi.com addresses from the kernel tree since they will
    become invalid on June 27th. Change my maintainer email address for the
    slab allocators to cl@linux-foundation.org (which will be the new email
    address for the future).

    Signed-off-by: Christoph Lameter
    Signed-off-by: Christoph Lameter
    Cc: Pekka Enberg
    Cc: Stephen Rothwell
    Cc: Matt Mackall
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

03 Jul, 2008

1 commit

  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6: (55 commits)
    net: fib_rules: fix error code for unsupported families
    netdevice: Fix wrong string handle in kernel command line parsing
    net: Tyop of sk_filter() comment
    netlink: Unneeded local variable
    net-sched: fix filter destruction in atm/hfsc qdisc destruction
    net-sched: change tcf_destroy_chain() to clear start of filter list
    ipv4: fix sysctl documentation of time related values
    mac80211: don't accept WEP keys other than WEP40 and WEP104
    hostap: fix sparse warnings
    hostap: don't report useless WDS frames by default
    textsearch: fix Boyer-Moore text search bug
    netfilter: nf_conntrack_tcp: fixing to check the lower bound of valid ACK
    ipv6 route: Convert rt6_device_match() to use RT6_LOOKUP_F_xxx flags.
    netlabel: Fix a problem when dumping the default IPv6 static labels
    net/inet_lro: remove setting skb->ip_summed when not LRO-able
    inet fragments: fix race between inet_frag_find and inet_frag_secret_rebuild
    CONNECTOR: add a proc entry to list connectors
    netlink: Fix some doc comments in net/netlink/attr.c
    tcp: /proc/net/tcp rto,ato values not scaled properly (v2)
    include/linux/netdevice.h: don't export MAX_HEADER to userspace
    ...

    Linus Torvalds
     

01 Jul, 2008

1 commit

  • The current logic has a bug which cannot find matching pattern, if the
    pattern is matched from the first character of target string.
    for example:
    pattern=abc, string=abcdefg
    pattern=a, string=abcdefg
    Searching algorithm should return 0 for those things.

    Signed-off-by: Joonwoo Park
    Signed-off-by: Patrick McHardy
    Signed-off-by: David S. Miller

    Joonwoo Park
     

18 Jun, 2008

1 commit

  • Daniel J Blueman reported:
    | =======================================================
    | [ INFO: possible circular locking dependency detected ]
    | 2.6.26-rc5-201c #1
    | -------------------------------------------------------
    | nscd/3669 is trying to acquire lock:
    | (&n->list_lock){.+..}, at: [] deactivate_slab+0x173/0x1e0
    |
    | but task is already holding lock:
    | (&obj_hash[i].lock){++..}, at: []
    | __debug_object_init+0x2f/0x350
    |
    | which lock already depends on the new lock.

    There are two locks involved here; the first is a SLUB-local lock, and
    the second is a debugobjects-local lock. They are basically taken in two
    different orders:

    1. SLUB { debugobjects { ... } }
    2. debugobjects { SLUB { ... } }

    This patch changes pattern #2 by trying to fill the memory pool (e.g.
    the call into SLUB/kmalloc()) outside the debugobjects lock, so now the
    two patterns look like this:

    1. SLUB { debugobjects { ... } }
    2. SLUB { } debugobjects { ... }

    [ daniel.blueman@gmail.com: pool_lock needs to be taken irq safe in fill_pool ]

    Reported-by: Daniel J Blueman
    Signed-off-by: Vegard Nossum
    Signed-off-by: Thomas Gleixner

    Vegard Nossum
     

13 Jun, 2008

1 commit

  • We shrink a radix tree when its root node has only one child, in the left
    most slot. The child becomes the new root node. To perform this
    operation in a manner compatible with concurrent lockless lookups, we
    atomically switch the root pointer from the parent to its child.

    However a concurrent lockless lookup may now have loaded a pointer to the
    parent (and is presently deciding what to do next). For this reason, we
    also have to keep the parent node in a valid state after shrinking the
    tree, until the next RCU grace period -- otherwise this lookup with the
    parent pointer may not do the right thing. Notably, we need to keep the
    child in the left most slot there in case that is requested by the lookup.

    This is all pretty standard RCU stuff. It is worth repeating because in
    my eagerness to obey the radix tree node constructor scheme, I had broken
    it by zeroing the radix tree node before the grace period.

    What could happen is that a lookup can load the parent pointer, then
    decide it wants to follow the left most child slot, only to find the slot
    contained NULL due to the concurrent shrinker having zeroed the parent
    node before waiting for a grace period. The lookup would return a false
    negative as a result.

    Fix it by doing that clearing in the RCU callback. I would normally want
    to rip out the constructor entirely, but radix tree nodes are one of those
    places where they make sense (only few cachelines will be touched soon
    after allocation).

    This was never actually found in any lockless pagecache testing or by the
    test harness, but by seeing the odd problem with my scalable vmap rewrite.
    I have not tickled the test harness into reproducing it yet, but I'll
    keep working at it.

    Fortunately, it is not a problem anywhere lockless pagecache is used in
    mainline kernels (pagecache probe is not a guarantee, and brd does not
    have concurrent lookups and deletes).

    Signed-off-by: Nick Piggin
    Acked-by: Peter Zijlstra
    Cc: "Paul E. McKenney"
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     

12 Jun, 2008

2 commits

  • iter_div_u64_rem is used in the x86-64 vdso, which cannot call other
    kernel code. For this case, provide the always_inlined version,
    __iter_div_u64_rem.

    Signed-off-by: Jeremy Fitzhardinge
    Signed-off-by: Ingo Molnar

    Jeremy Fitzhardinge
     
  • We have a few instances of the open-coded iterative div/mod loop, used
    when we don't expcet the dividend to be much bigger than the divisor.
    Unfortunately modern gcc's have the tendency to strength "reduce" this
    into a full mod operation, which isn't necessarily any faster, and
    even if it were, doesn't exist if gcc implements it in libgcc.

    The workaround is to put a dummy asm statement in the loop to prevent
    gcc from performing the transformation.

    This patch creates a single implementation of this loop, and uses it
    to replace the open-coded versions I know about.

    Signed-off-by: Jeremy Fitzhardinge
    Cc: Andrew Morton
    Cc: john stultz
    Cc: Segher Boessenkool
    Cc: Christian Kujau
    Cc: Robert Hancock
    Signed-off-by: Ingo Molnar

    Jeremy Fitzhardinge
     

07 Jun, 2008

1 commit

  • Bluetooth will be able to use this.

    Signed-off-by: Harvey Harrison
    Cc: Marcel Holtmann
    Cc: Dave Young
    Cc: Akinobu Mita
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Harvey Harrison
     

19 May, 2008

1 commit


15 May, 2008

4 commits

  • * 'for-linus' of ssh://master.kernel.org/pub/scm/linux/kernel/git/ericvh/v9fs:
    9p: fix error path during early mount
    9p: make cryptic unknown error from server less scary
    9p: fix flags length in net
    9p: Correct fidpool creation failure in p9_client_create
    9p: use struct mutex instead of struct semaphore
    9p: propagate parse_option changes to client and transports
    fs/9p/v9fs.c (v9fs_parse_options): Handle kstrdup and match_strdup failure.
    9p: Documentation updates
    add match_strlcpy() us it to make v9fs make uname and remotename parsing more robust

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6:
    sparc64: Use a TS_RESTORE_SIGMASK
    lmb: Make lmb debugging more useful.
    lmb: Fix inconsistent alignment of size argument.
    sparc: Fix mremap address range validation.

    Linus Torvalds
     
  • Add a common hex array in hexdump.c so everyone can use it.

    Add a common hi/lo helper to avoid the shifting masking that is
    done to get the upper and lower nibbles of a byte value.

    Pull the pack_hex_byte helper from kgdb as it is opencoded many
    places in the tree that will be consolidated.

    Signed-off-by: Harvey Harrison
    Acked-by: Paul Mundt
    Cc: Jason Wessel
    Cc: Ingo Molnar
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Harvey Harrison
     
  • match_strcpy() is a somewhat creepy function: the caller needs to make sure
    that the destination buffer is big enough, and when he screws up or
    forgets, match_strcpy() happily overruns the buffer.

    There's exactly one customer: v9fs_parse_options(). I believe it currently
    can't overflow its buffer, but that's not exactly obvious.

    The source string is a substing of the mount options. The kernel silently
    truncates those to PAGE_SIZE bytes, including the terminating zero. See
    compat_sys_mount() and do_mount().

    The destination buffer is obtained from __getname(), which allocates from
    name_cachep, which is initialized by vfs_caches_init() for size PATH_MAX.

    We're safe as long as PATH_MAX
    Cc: Latchesar Ionkov
    Cc: Jim Meyering
    Cc: "Randy.Dunlap"
    Signed-off-by: Andrew Morton
    Signed-off-by: Eric Van Hensbergen

    Markus Armbruster
     

13 May, 2008

3 commits

  • They aren't used. They were briefly used as part of some other patches to
    provide an alternative format for displaying some /proc and /sys cpumasks.
    They probably should have been removed when those other patches were dropped,
    in favor of a different solution.

    Signed-off-by: Paul Jackson
    Cc: "Mike Travis"
    Cc: "Bert Wesarg"
    Cc: Alexey Dobriyan
    Cc: WANG Cong
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Paul Jackson
     
  • Having to muck with the build and set DEBUG just to
    get lmb_dump_all() to print things isn't very useful.

    So use pr_info() and use an early boot param
    "lmb=debug" so we can simply ask users to reboot
    with this option when we need some debugging from
    them.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • When allocating, if we will align up the size when making
    the reservation, we should also align the size for the
    check that the space is actually available.

    The simplest thing is to just aling the size up from
    the beginning, then we can use plain 'size' throughout.

    Signed-off-by: David S. Miller

    David S. Miller
     

11 May, 2008

1 commit

  • The generic semaphore rewrite had a huge performance regression on AIM7
    (and potentially other BKL-heavy benchmarks) because the generic
    semaphores had been rewritten to be simple to understand and fair. The
    latter, in particular, turns a semaphore-based BKL implementation into a
    mess of scheduling.

    The attempt to fix the performance regression failed miserably (see the
    previous commit 00b41ec2611dc98f87f30753ee00a53db648d662 'Revert
    "semaphore: fix"'), and so for now the simple and sane approach is to
    instead just go back to the old spinlock-based BKL implementation that
    never had any issues like this.

    This patch also has the advantage of being reported to fix the
    regression completely according to Yanmin Zhang, unlike the semaphore
    hack which still left a couple percentage point regression.

    As a spinlock, the BKL obviously has the potential to be a latency
    issue, but it's not really any different from any other spinlock in that
    respect. We do want to get rid of the BKL asap, but that has been the
    plan for several years.

    These days, the biggest users are in the tty layer (open/release in
    particular) and Alan holds out some hope:

    "tty release is probably a few months away from getting cured - I'm
    afraid it will almost certainly be the very last user of the BKL in
    tty to get fixed as it depends on everything else being sanely locked."

    so while we're not there yet, we do have a plan of action.

    Tested-by: Yanmin Zhang
    Cc: Ingo Molnar
    Cc: Andi Kleen
    Cc: Matthew Wilcox
    Cc: Alexander Viro
    Cc: Andrew Morton
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

06 May, 2008

1 commit


05 May, 2008

2 commits


01 May, 2008

8 commits

  • The return inside the loop makes us free only a single layer.

    Signed-off-by: Nadia Derbey
    Cc: "Paul E. McKenney"
    Cc: Manfred Spraul
    Cc: Jim Houston
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nadia Derbey
     
  • Add a new sysfs_streq() string comparison function, which ignores
    the trailing newlines found in sysfs inputs. By example:

    sysfs_streq("a", "b") ==> false
    sysfs_streq("a", "a") ==> true
    sysfs_streq("a", "a\n") ==> true
    sysfs_streq("a\n", "a") ==> true

    This is intended to simplify parsing of sysfs inputs, letting them
    avoid the need to manually strip off newlines from inputs.

    Signed-off-by: David Brownell
    Acked-by: Greg KH
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Brownell
     
  • Rename div64_64 to div64_u64 to make it consistent with the other divide
    functions, so it clearly includes the type of the divide. Move its definition
    to math64.h as currently no architecture overrides the generic implementation.
    They can still override it of course, but the duplicated declarations are
    avoided.

    Signed-off-by: Roman Zippel
    Cc: Avi Kivity
    Cc: Russell King
    Cc: Geert Uytterhoeven
    Cc: Ralf Baechle
    Cc: David Howells
    Cc: Jeff Dike
    Cc: Ingo Molnar
    Cc: "David S. Miller"
    Cc: Patrick McHardy
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roman Zippel
     
  • The current do_div doesn't explicitly say that it's unsigned and the signed
    counterpart is missing, which is e.g. needed when dealing with time values.

    This introduces 64bit signed/unsigned divide functions which also attempts to
    cleanup the somewhat awkward calling API, which often requires the use of
    temporary variables for the dividend. To avoid the need for temporary
    variables everywhere for the remainder, each divide variant also provides a
    version which doesn't return the remainder.

    Each architecture can now provide optimized versions of these function,
    otherwise generic fallback implementations will be used.

    As an example I provided an alternative for the current x86 divide, which
    avoids the asm casts and using an union allows gcc to generate better code.
    It also avoids the upper divde in a few more cases, where the result is known
    (i.e. upper quotient is zero).

    Signed-off-by: Roman Zippel
    Cc: john stultz
    Cc: Thomas Gleixner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Roman Zippel
     
  • Finally clean up the odd spacing in these files.

    Signed-off-by: Greg Kroah-Hartman

    Greg Kroah-Hartman
     
  • Use a resource_size_t instead of unsigned long since some arch's are
    capable of having ioremap deal with addresses greater than the size of a
    unsigned long.

    Signed-off-by: Kumar Gala
    Cc: Tejun Heo
    Cc: Jeff Garzik
    Signed-off-by: Greg Kroah-Hartman

    Kumar Gala
     
  • This prevents a few unneeded copies.

    Signed-off-by: Kay Sievers
    Signed-off-by: Greg Kroah-Hartman

    Kay Sievers
     
  • Add klist_add_after() and klist_add_before() which puts a new node
    after and before an existing node, respectively. This is useful for
    callers which need to keep klist ordered. Note that synchronizing
    between simultaneous additions for ordering is the caller's
    responsibility.

    Signed-off-by: Tejun Heo
    Signed-off-by: Greg Kroah-Hartman

    Tejun Heo
     

30 Apr, 2008

5 commits

  • __FUNCTION__ is gcc specific, use __func__

    Signed-off-by: Harvey Harrison
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Harvey Harrison
     
  • Add calls to the generic object debugging infrastructure and provide fixup
    functions which allow to keep the system alive when recoverable problems have
    been detected by the object debugging core code.

    Signed-off-by: Thomas Gleixner
    Acked-by: Ingo Molnar
    Cc: Greg KH
    Cc: Randy Dunlap
    Cc: Kay Sievers
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Thomas Gleixner
     
  • We can see an ever repeating problem pattern with objects of any kind in the
    kernel:

    1) freeing of active objects
    2) reinitialization of active objects

    Both problems can be hard to debug because the crash happens at a point where
    we have no chance to decode the root cause anymore. One problem spot are
    kernel timers, where the detection of the problem often happens in interrupt
    context and usually causes the machine to panic.

    While working on a timer related bug report I had to hack specialized code
    into the timer subsystem to get a reasonable hint for the root cause. This
    debug hack was fine for temporary use, but far from a mergeable solution due
    to the intrusiveness into the timer code.

    The code further lacked the ability to detect and report the root cause
    instantly and keep the system operational.

    Keeping the system operational is important to get hold of the debug
    information without special debugging aids like serial consoles and special
    knowledge of the bug reporter.

    The problems described above are not restricted to timers, but timers tend to
    expose it usually in a full system crash. Other objects are less explosive,
    but the symptoms caused by such mistakes can be even harder to debug.

    Instead of creating specialized debugging code for the timer subsystem a
    generic infrastructure is created which allows developers to verify their code
    and provides an easy to enable debug facility for users in case of trouble.

    The debugobjects core code keeps track of operations on static and dynamic
    objects by inserting them into a hashed list and sanity checking them on
    object operations and provides additional checks whenever kernel memory is
    freed.

    The tracked object operations are:
    - initializing an object
    - adding an object to a subsystem list
    - deleting an object from a subsystem list

    Each operation is sanity checked before the operation is executed and the
    subsystem specific code can provide a fixup function which allows to prevent
    the damage of the operation. When the sanity check triggers a warning message
    and a stack trace is printed.

    The list of operations can be extended if the need arises. For now it's
    limited to the requirements of the first user (timers).

    The core code enqueues the objects into hash buckets. The hash index is
    generated from the address of the object to simplify the lookup for the check
    on kfree/vfree. Each bucket has it's own spinlock to avoid contention on a
    global lock.

    The debug code can be compiled in without being active. The runtime overhead
    is minimal and could be optimized by asm alternatives. A kernel command line
    option enables the debugging code.

    Thanks to Ingo Molnar for review, suggestions and cleanup patches.

    Signed-off-by: Thomas Gleixner
    Signed-off-by: Ingo Molnar
    Cc: Greg KH
    Cc: Randy Dunlap
    Cc: Kay Sievers
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Thomas Gleixner
     
  • Add "max_ratio" to /sys/class/bdi. This indicates the maximum percentage of
    the global dirty threshold allocated to this bdi.

    [mszeredi@suse.cz]

    - fix parsing in max_ratio_store().
    - export bdi_set_max_ratio() to modules
    - limit bdi_dirty with bdi->max_ratio
    - document new sysfs attribute

    Signed-off-by: Peter Zijlstra
    Signed-off-by: Miklos Szeredi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     
  • Provide a place in sysfs (/sys/class/bdi) for the backing_dev_info object.
    This allows us to see and set the various BDI specific variables.

    In particular this properly exposes the read-ahead window for all relevant
    users and /sys/block//queue/read_ahead_kb should be deprecated.

    With patient help from Kay Sievers and Greg KH

    [mszeredi@suse.cz]

    - split off NFS and FUSE changes into separate patches
    - document new sysfs attributes under Documentation/ABI
    - do bdi_class_init as a core_initcall, otherwise the "default" BDI
    won't be initialized
    - remove bdi_init_fmt macro, it's not used very much

    [akpm@linux-foundation.org: fix ia64 warning]
    Signed-off-by: Peter Zijlstra
    Cc: Kay Sievers
    Acked-by: Greg KH
    Cc: Trond Myklebust
    Signed-off-by: Miklos Szeredi
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Peter Zijlstra
     

29 Apr, 2008

2 commits

  • * 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc:
    [RAPIDIO] Change RapidIO doorbell source and target ID field to 16-bit
    [RAPIDIO] Add RapidIO connection info print out and re-training for broken connections
    [RAPIDIO] Add serial RapidIO controller support, which includes MPC8548, MPC8641
    [RAPIDIO] Add RapidIO node probing into MPC86xx_HPCN board id table
    [RAPIDIO] Add RapidIO node into MPC8641HPCN dts file
    [RAPIDIO] Auto-probe the RapidIO system size
    [RAPIDIO] Add OF-tree support to RapidIO controller driver
    [RAPIDIO] Add RapidIO multi mport support
    [RAPIDIO] Move include/asm-ppc/rio.h to asm-powerpc
    [RAPIDIO] Add RapidIO option to kernel configuration
    [RAPIDIO] Change RIO function mpc85xx_ to fsl_
    [POWERPC] Provide walk_memory_resource() for powerpc
    [POWERPC] Update lmb data structures for hotplug memory add/remove
    [POWERPC] Hotplug memory remove notifications for powerpc
    [POWERPC] windfarm: Add PowerMac 12,1 support
    [POWERPC] Fix building of pmac32 when CONFIG_NVRAM=m
    [POWERPC] Add IRQSTACKS support on ppc32
    [POWERPC] Use __always_inline for xchg* and cmpxchg*
    [POWERPC] Add fast little-endian switch system call

    Linus Torvalds
     
  • The mapsize optimizations which were moved from x86 to the generic
    code in commit 64970b68d2b3ed32b964b0b30b1b98518fde388e increased the
    binary size on non x86 architectures.

    Looking into the real effects of the "optimizations" it turned out
    that they are not used in find_next_bit() and find_next_zero_bit().

    The ones in find_first_bit() and find_first_zero_bit() are used in a
    couple of places but none of them is a real hot path.

    Remove the "optimizations" all together and call the library functions
    unconditionally.

    Boot-tested on x86 and compile tested on every cross compiler I have.

    Signed-off-by: Thomas Gleixner
    Signed-off-by: Linus Torvalds

    Thomas Gleixner