tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   53ab78cd6d5aba25575a7cfb95729336ba9497d8
commit: 96f1b00138cb8f04c742c82d0a7c460b2202e887 ARCv2: save ABI registers 
across signal handling
date:   9 months ago
config: arc-randconfig-s032-20220226 
(https://download.01.org/0day-ci/archive/20220226/202202260759.dxhgi8gg-...@intel.com/config)
compiler: arceb-elf-gcc (GCC) 11.2.0
reproduce:
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=96f1b00138cb8f04c742c82d0a7c460b2202e887
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 96f1b00138cb8f04c742c82d0a7c460b2202e887
        # save the config file to linux build tree
        mkdir build_dir
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 
CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arc 
SHELL=/bin/bash arch/arc/kernel/ drivers/remoteproc/ fs/ kernel/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>


sparse warnings: (new ones prefixed by >>)
>> arch/arc/kernel/signal.c:77:31: sparse: sparse: incorrect type in argument 1 
>> (different address spaces) @@     expected void [noderef] __user *to @@     
>> got struct user_regs_arcv2 * @@
   arch/arc/kernel/signal.c:77:31: sparse:     expected void [noderef] __user 
*to
   arch/arc/kernel/signal.c:77:31: sparse:     got struct user_regs_arcv2 *
>> arch/arc/kernel/signal.c:88:41: sparse: sparse: incorrect type in argument 2 
>> (different address spaces) @@     expected void const [noderef] __user *from 
>> @@     got struct user_regs_arcv2 * @@
   arch/arc/kernel/signal.c:88:41: sparse:     expected void const [noderef] 
__user *from
   arch/arc/kernel/signal.c:88:41: sparse:     got struct user_regs_arcv2 *
>> arch/arc/kernel/signal.c:134:42: sparse: sparse: incorrect type in argument 
>> 1 (different address spaces) @@     expected struct sigcontext *mctx @@     
>> got struct sigcontext [noderef] __user * @@
   arch/arc/kernel/signal.c:134:42: sparse:     expected struct sigcontext *mctx
   arch/arc/kernel/signal.c:134:42: sparse:     got struct sigcontext [noderef] 
__user *
   arch/arc/kernel/signal.c:153:45: sparse: sparse: incorrect type in argument 
1 (different address spaces) @@     expected struct sigcontext *mctx @@     got 
struct sigcontext [noderef] __user * @@
   arch/arc/kernel/signal.c:153:45: sparse:     expected struct sigcontext *mctx
   arch/arc/kernel/signal.c:153:45: sparse:     got struct sigcontext [noderef] 
__user *

vim +77 arch/arc/kernel/signal.c

    63  
    64  static int save_arcv2_regs(struct sigcontext *mctx, struct pt_regs 
*regs)
    65  {
    66          int err = 0;
    67  #ifndef CONFIG_ISA_ARCOMPACT
    68          struct user_regs_arcv2 v2abi;
    69  
    70          v2abi.r30 = regs->r30;
    71  #ifdef CONFIG_ARC_HAS_ACCL_REGS
    72          v2abi.r58 = regs->r58;
    73          v2abi.r59 = regs->r59;
    74  #else
    75          v2abi.r58 = v2abi.r59 = 0;
    76  #endif
  > 77          err = __copy_to_user(&mctx->v2abi, &v2abi, sizeof(v2abi));
    78  #endif
    79          return err;
    80  }
    81  
    82  static int restore_arcv2_regs(struct sigcontext *mctx, struct pt_regs 
*regs)
    83  {
    84          int err = 0;
    85  #ifndef CONFIG_ISA_ARCOMPACT
    86          struct user_regs_arcv2 v2abi;
    87  
  > 88          err = __copy_from_user(&v2abi, &mctx->v2abi, sizeof(v2abi));
    89  
    90          regs->r30 = v2abi.r30;
    91  #ifdef CONFIG_ARC_HAS_ACCL_REGS
    92          regs->r58 = v2abi.r58;
    93          regs->r59 = v2abi.r59;
    94  #endif
    95  #endif
    96          return err;
    97  }
    98  
    99  static int
   100  stash_usr_regs(struct rt_sigframe __user *sf, struct pt_regs *regs,
   101                 sigset_t *set)
   102  {
   103          int err;
   104          struct user_regs_struct uregs;
   105  
   106          uregs.scratch.bta       = regs->bta;
   107          uregs.scratch.lp_start  = regs->lp_start;
   108          uregs.scratch.lp_end    = regs->lp_end;
   109          uregs.scratch.lp_count  = regs->lp_count;
   110          uregs.scratch.status32  = regs->status32;
   111          uregs.scratch.ret       = regs->ret;
   112          uregs.scratch.blink     = regs->blink;
   113          uregs.scratch.fp        = regs->fp;
   114          uregs.scratch.gp        = regs->r26;
   115          uregs.scratch.r12       = regs->r12;
   116          uregs.scratch.r11       = regs->r11;
   117          uregs.scratch.r10       = regs->r10;
   118          uregs.scratch.r9        = regs->r9;
   119          uregs.scratch.r8        = regs->r8;
   120          uregs.scratch.r7        = regs->r7;
   121          uregs.scratch.r6        = regs->r6;
   122          uregs.scratch.r5        = regs->r5;
   123          uregs.scratch.r4        = regs->r4;
   124          uregs.scratch.r3        = regs->r3;
   125          uregs.scratch.r2        = regs->r2;
   126          uregs.scratch.r1        = regs->r1;
   127          uregs.scratch.r0        = regs->r0;
   128          uregs.scratch.sp        = regs->sp;
   129  
   130          err = __copy_to_user(&(sf->uc.uc_mcontext.regs.scratch), 
&uregs.scratch,
   131                               sizeof(sf->uc.uc_mcontext.regs.scratch));
   132  
   133          if (is_isa_arcv2())
 > 134                  err |= save_arcv2_regs(&(sf->uc.uc_mcontext), regs);
   135  
   136          err |= __copy_to_user(&sf->uc.uc_sigmask, set, 
sizeof(sigset_t));
   137  
   138          return err ? -EFAULT : 0;
   139  }
   140  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

Reply via email to