Re: [PATCH 4/4] scsi: arcmsr: simplify all arcmsr_hbaX_get_config routine by call a new get_adapter_config function

From: kbuild test robot
Date: Thu Dec 14 2017 - 00:14:08 EST


Hi Ching,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on scsi/for-next]
[also build test WARNING on next-20171213]
[cannot apply to v4.15-rc3]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Ching-Huang/scsi-arcmsr-simplify-hba_get_config-routine/20171213-224803
base: https://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git for-next
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)


vim +2971 drivers/scsi/arcmsr/arcmsr_hba.c

2958
2959 static void arcmsr_get_adapter_config(struct AdapterControlBlock *pACB, uint32_t *rwbuffer)
2960 {
2961 int count;
2962 uint32_t *acb_firm_model = (uint32_t *)pACB->firm_model;
2963 uint32_t *acb_firm_version = (uint32_t *)pACB->firm_version;
2964 uint32_t *acb_device_map = (uint32_t *)pACB->device_map;
2965 uint32_t *firm_model = &rwbuffer[15];
2966 uint32_t *firm_version = &rwbuffer[17];
2967 uint32_t *device_map = &rwbuffer[21];
2968
2969 count = 2;
2970 while (count) {
> 2971 *acb_firm_model = readl(firm_model);
2972 acb_firm_model++;
2973 firm_model++;
2974 count--;
2975 }
2976 count = 4;
2977 while (count) {
2978 *acb_firm_version = readl(firm_version);
2979 acb_firm_version++;
2980 firm_version++;
2981 count--;
2982 }
2983 count = 4;
2984 while (count) {
2985 *acb_device_map = readl(device_map);
2986 acb_device_map++;
2987 device_map++;
2988 count--;
2989 }
2990 pACB->signature = readl(&rwbuffer[0]);
2991 pACB->firm_request_len = readl(&rwbuffer[1]);
2992 pACB->firm_numbers_queue = readl(&rwbuffer[2]);
> 2993 pACB->firm_sdram_size = readl(&rwbuffer[3]);
> 2994 pACB->firm_hd_channels = readl(&rwbuffer[4]);
2995 pACB->firm_cfg_version = readl(&rwbuffer[25]);
2996 pr_notice("Areca RAID Controller%d: Model %s, F/W %s\n",
2997 pACB->host->host_no,
2998 pACB->firm_model,
2999 pACB->firm_version);
3000 }
3001
3002 static bool arcmsr_hbaA_get_config(struct AdapterControlBlock *acb)
3003 {
3004 struct MessageUnit_A __iomem *reg = acb->pmuA;
3005
3006 arcmsr_wait_firmware_ready(acb);
3007 writel(ARCMSR_INBOUND_MESG0_GET_CONFIG, &reg->inbound_msgaddr0);
3008 if (!arcmsr_hbaA_wait_msgint_ready(acb)) {
3009 printk(KERN_NOTICE "arcmsr%d: wait 'get adapter firmware \
3010 miscellaneous data' timeout \n", acb->host->host_no);
3011 return false;
3012 }
> 3013 arcmsr_get_adapter_config(acb, reg->message_rwbuffer);
3014 return true;
3015 }
3016 static bool arcmsr_hbaB_get_config(struct AdapterControlBlock *acb)
3017 {
3018 struct MessageUnit_B *reg = acb->pmuB;
3019
3020 arcmsr_wait_firmware_ready(acb);
3021 writel(ARCMSR_MESSAGE_START_DRIVER_MODE, reg->drv2iop_doorbell);
3022 if (!arcmsr_hbaB_wait_msgint_ready(acb)) {
3023 printk(KERN_ERR "arcmsr%d: can't set driver mode.\n", acb->host->host_no);
3024 return false;
3025 }
3026 writel(ARCMSR_MESSAGE_GET_CONFIG, reg->drv2iop_doorbell);
3027 if (!arcmsr_hbaB_wait_msgint_ready(acb)) {
3028 printk(KERN_NOTICE "arcmsr%d: wait 'get adapter firmware \
3029 miscellaneous data' timeout \n", acb->host->host_no);
3030 return false;
3031 }
> 3032 arcmsr_get_adapter_config(acb, reg->message_rwbuffer);
3033 return true;
3034 }
3035

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation