1. 18 4月, 2015 5 次提交
    • C
      tile: support CONTEXT_TRACKING and thus NOHZ_FULL · 49e4e156
      Chris Metcalf 提交于
      Add the TIF_NOHZ flag appropriately.
      
      Add call to user_exit() on entry to do_work_pending() and on entry
      to syscalls via do_syscall_trace_enter(), and also the top of
      do_syscall_trace_exit() just because it's done in x86.
      
      Add call to user_enter() at the bottom of do_work_pending() once we
      have no more work to do before returning to userspace.
      
      Wrap all the trap code in exception_enter() / exception_exit().
      Signed-off-by: NChris Metcalf <cmetcalf@ezchip.com>
      Acked-by: NFrederic Weisbecker <fweisbec@gmail.com>
      49e4e156
    • C
      tile: support arch_irq_work_raise · b340c656
      Chris Metcalf 提交于
      Tile includes a hypervisor hook to deliver messages to arbitrary
      tiles, so we can use that to raise an interrupt as soon as
      possible on our own core.  Unfortunately the Tilera hypervisor
      disabled that support on principle in previous releases, but
      it will be available in MDE 4.3.4 and later.
      Signed-off-by: NChris Metcalf <cmetcalf@ezchip.com>
      Acked-by: NFrederic Weisbecker <fweisbec@gmail.com>
      b340c656
    • C
      arch: tile: fix null pointer dereference on pt_regs pointer · 9088616f
      Colin Ian King 提交于
      Cppcheck reports the following issue:
      [arch/tile/kernel/stack.c:116]: (error) Possible null
        pointer dereference: p
      
      In this case, on reporting on an odd fault, p is set to NULL
      and immediately afterwords p is dereferenced iff
      !kbt->profile is false.  Rather than doing this check just
      return NULL rather than falling through to the potential
      null pointer dereference (since the original intentional
      outcome would be to return NULL anyhow) for this odd fault
      case.
      Signed-off-by: NColin Ian King <colin.king@canonical.com>
      Signed-off-by: Chris Metcalf <cmetcalf@ezchip.com> [tweaked lightly]
      9088616f
    • D
      tile/elf: reorganize notify_exec() · 5a3b4e80
      Davidlohr Bueso 提交于
      In the future mm->exe_file will be done without mmap_sem
      serialization, thus isolate and reorganize the tile elf
      code to make the transition easier. Good users will, make
      use of the more standard get_mm_exe_file(), requiring only
      holding the mmap_sem to read the value, and relying on reference
      counting to make sure that the exe file won't dissappear
      underneath us.
      
      The visible effects of this patch are:
      
         o We now take and drop the mmap_sem more often. Instead of
           just in arch_setup_additional_pages(), we also do it in:
      
           1) get_mm_exe_file()
           2) to get the mm->vm_file and notify the simulator.
      
          [Note that 1) will disappear once we change the locking
           rules for exe_file.]
      
         o We avoid getting a free page and doing d_path() while
           holding the mmap_sem. This requires reordering the checks.
      Signed-off-by: NDavidlohr Bueso <dbueso@suse.de>
      Signed-off-by: NChris Metcalf <cmetcalf@ezchip.com>
      5a3b4e80
    • C
      tile: use si_int instead of si_ptr for compat_siginfo · 89067c2d
      Chris Metcalf 提交于
      To be compatible with the generic get_compat_sigevent(), the
      copy_siginfo_to_user32() and thus copy_siginfo_from_user32()
      have to use si_int instead of si_ptr.  Using si_ptr means that
      for the case of ILP32 compat code running in big-endian mode,
      we would end up copying the high 32 bits of the pointer value
      into si_int instead of the desired low 32 bits.
      Signed-off-by: NChris Metcalf <cmetcalf@ezchip.com>
      Cc: Catalin Marinas <catalin.marinas@arm.com>
      89067c2d
  2. 23 2月, 2015 1 次提交
    • D
      VFS: (Scripted) Convert S_ISLNK/DIR/REG(dentry->d_inode) to d_is_*(dentry) · e36cb0b8
      David Howells 提交于
      Convert the following where appropriate:
      
       (1) S_ISLNK(dentry->d_inode) to d_is_symlink(dentry).
      
       (2) S_ISREG(dentry->d_inode) to d_is_reg(dentry).
      
       (3) S_ISDIR(dentry->d_inode) to d_is_dir(dentry).  This is actually more
           complicated than it appears as some calls should be converted to
           d_can_lookup() instead.  The difference is whether the directory in
           question is a real dir with a ->lookup op or whether it's a fake dir with
           a ->d_automount op.
      
      In some circumstances, we can subsume checks for dentry->d_inode not being
      NULL into this, provided we the code isn't in a filesystem that expects
      d_inode to be NULL if the dirent really *is* negative (ie. if we're going to
      use d_inode() rather than d_backing_inode() to get the inode pointer).
      
      Note that the dentry type field may be set to something other than
      DCACHE_MISS_TYPE when d_inode is NULL in the case of unionmount, where the VFS
      manages the fall-through from a negative dentry to a lower layer.  In such a
      case, the dentry type of the negative union dentry is set to the same as the
      type of the lower dentry.
      
      However, if you know d_inode is not NULL at the call site, then you can use
      the d_is_xxx() functions even in a filesystem.
      
      There is one further complication: a 0,0 chardev dentry may be labelled
      DCACHE_WHITEOUT_TYPE rather than DCACHE_SPECIAL_TYPE.  Strictly, this was
      intended for special directory entry types that don't have attached inodes.
      
      The following perl+coccinelle script was used:
      
      use strict;
      
      my @callers;
      open($fd, 'git grep -l \'S_IS[A-Z].*->d_inode\' |') ||
          die "Can't grep for S_ISDIR and co. callers";
      @callers = <$fd>;
      close($fd);
      unless (@callers) {
          print "No matches\n";
          exit(0);
      }
      
      my @cocci = (
          '@@',
          'expression E;',
          '@@',
          '',
          '- S_ISLNK(E->d_inode->i_mode)',
          '+ d_is_symlink(E)',
          '',
          '@@',
          'expression E;',
          '@@',
          '',
          '- S_ISDIR(E->d_inode->i_mode)',
          '+ d_is_dir(E)',
          '',
          '@@',
          'expression E;',
          '@@',
          '',
          '- S_ISREG(E->d_inode->i_mode)',
          '+ d_is_reg(E)' );
      
      my $coccifile = "tmp.sp.cocci";
      open($fd, ">$coccifile") || die $coccifile;
      print($fd "$_\n") || die $coccifile foreach (@cocci);
      close($fd);
      
      foreach my $file (@callers) {
          chomp $file;
          print "Processing ", $file, "\n";
          system("spatch", "--sp-file", $coccifile, $file, "--in-place", "--no-show-diff") == 0 ||
      	die "spatch failed";
      }
      
      [AV: overlayfs parts skipped]
      Signed-off-by: NDavid Howells <dhowells@redhat.com>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      e36cb0b8
  3. 21 2月, 2015 2 次提交
  4. 20 2月, 2015 29 次提交
  5. 19 2月, 2015 3 次提交