Hi Liu, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on next-20200911] url: https://github.com/0day-ci/linux/commits/Liu-Shixin/dm-integrity-convert-to-use-le64_add_cpu/20200914-115650 base: d5b2251d63b5344ee827d3680fa79bdb9f9ddfa1 config: x86_64-randconfig-s022-20200914 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.2-191-g10164920-dirty # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@xxxxxxxxx> sparse warnings: (new ones prefixed by >>) drivers/md/dm-integrity.c:2672:25: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:2712:25: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] sector_hi @@ got restricted __le32 [usertype] @@ drivers/md/dm-integrity.c:2712:25: sparse: expected unsigned int [usertype] sector_hi drivers/md/dm-integrity.c:2712:25: sparse: got restricted __le32 [usertype] drivers/md/dm-integrity.c:2784:38: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:2945:31: sparse: sparse: invalid assignment: &= drivers/md/dm-integrity.c:2945:31: sparse: left side has type unsigned int drivers/md/dm-integrity.c:2945:31: sparse: right side has type restricted __le32 drivers/md/dm-integrity.c:2960:43: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:2977:47: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] provided_data_sectors @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:2977:47: sparse: expected unsigned long long [usertype] provided_data_sectors drivers/md/dm-integrity.c:2977:47: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:2983:29: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:2993:55: sparse: sparse: invalid assignment: |= drivers/md/dm-integrity.c:2993:55: sparse: left side has type unsigned int drivers/md/dm-integrity.c:2993:55: sparse: right side has type restricted __le32 drivers/md/dm-integrity.c:2994:63: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] recalc_sector @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:2994:63: sparse: expected unsigned long long [usertype] recalc_sector drivers/md/dm-integrity.c:2994:63: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:3005:47: sparse: sparse: invalid assignment: |= drivers/md/dm-integrity.c:3005:47: sparse: left side has type unsigned int drivers/md/dm-integrity.c:3005:47: sparse: right side has type restricted __le32 drivers/md/dm-integrity.c:3006:55: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] recalc_sector @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:3006:55: sparse: expected unsigned long long [usertype] recalc_sector drivers/md/dm-integrity.c:3006:55: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:3011:47: sparse: sparse: invalid assignment: |= drivers/md/dm-integrity.c:3011:47: sparse: left side has type unsigned int drivers/md/dm-integrity.c:3011:47: sparse: right side has type restricted __le32 drivers/md/dm-integrity.c:3012:55: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] recalc_sector @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:3012:55: sparse: expected unsigned long long [usertype] recalc_sector drivers/md/dm-integrity.c:3012:55: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:3016:39: sparse: sparse: invalid assignment: &= drivers/md/dm-integrity.c:3016:39: sparse: left side has type unsigned int drivers/md/dm-integrity.c:3016:39: sparse: right side has type restricted __le32 drivers/md/dm-integrity.c:3024:39: sparse: sparse: invalid assignment: |= drivers/md/dm-integrity.c:3024:39: sparse: left side has type unsigned int drivers/md/dm-integrity.c:3024:39: sparse: right side has type restricted __le32 drivers/md/dm-integrity.c:3033:45: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:3034:29: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:3035:66: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:3036:77: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:3037:72: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:3038:77: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:3039:75: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:3040:77: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:3048:29: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:3049:36: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:3054:47: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] recalc_sector @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:3054:47: sparse: expected unsigned long long [usertype] recalc_sector drivers/md/dm-integrity.c:3054:47: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:3082:37: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:3083:25: sparse: sparse: cast to restricted __le64 drivers/md/dm-integrity.c:3095:49: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:3104:47: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:3111:37: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:3126:38: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:3171:32: sparse: sparse: cast to restricted __le32 drivers/md/dm-integrity.c:3175:29: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:3198:41: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:3253:36: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned short [usertype] integrity_tag_size @@ got restricted __le16 [usertype] @@ drivers/md/dm-integrity.c:3253:36: sparse: expected unsigned short [usertype] integrity_tag_size drivers/md/dm-integrity.c:3253:36: sparse: got restricted __le16 [usertype] drivers/md/dm-integrity.c:3256:31: sparse: sparse: invalid assignment: |= drivers/md/dm-integrity.c:3256:31: sparse: left side has type unsigned int drivers/md/dm-integrity.c:3256:31: sparse: right side has type restricted __le32 drivers/md/dm-integrity.c:3265:39: sparse: sparse: invalid assignment: |= drivers/md/dm-integrity.c:3265:39: sparse: left side has type unsigned int drivers/md/dm-integrity.c:3265:39: sparse: right side has type restricted __le32 drivers/md/dm-integrity.c:3266:42: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] journal_sections @@ got restricted __le32 [usertype] @@ drivers/md/dm-integrity.c:3266:42: sparse: expected unsigned int [usertype] journal_sections drivers/md/dm-integrity.c:3266:42: sparse: got restricted __le32 [usertype] drivers/md/dm-integrity.c:3284:42: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] journal_sections @@ got restricted __le32 [usertype] @@ drivers/md/dm-integrity.c:3284:42: sparse: expected unsigned int [usertype] journal_sections drivers/md/dm-integrity.c:3284:42: sparse: got restricted __le32 [usertype] drivers/md/dm-integrity.c:3286:55: sparse: sparse: cast to restricted __le32 drivers/md/dm-integrity.c:3290:50: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] journal_sections @@ got restricted __le32 [usertype] @@ drivers/md/dm-integrity.c:3290:50: sparse: expected unsigned int [usertype] journal_sections drivers/md/dm-integrity.c:3290:50: sparse: got restricted __le32 [usertype] drivers/md/dm-integrity.c:3292:58: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] journal_sections @@ got restricted __le32 [usertype] @@ drivers/md/dm-integrity.c:3292:58: sparse: expected unsigned int [usertype] journal_sections drivers/md/dm-integrity.c:3292:58: sparse: got restricted __le32 [usertype] drivers/md/dm-integrity.c:3295:22: sparse: sparse: cast to restricted __le32 drivers/md/dm-integrity.c:3304:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] provided_data_sectors @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:3304:39: sparse: expected unsigned long long [usertype] provided_data_sectors drivers/md/dm-integrity.c:3304:39: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:3496:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:3496:27: sparse: expected unsigned long long drivers/md/dm-integrity.c:3496:27: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:3497:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:3497:27: sparse: expected unsigned long long drivers/md/dm-integrity.c:3497:27: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:3498:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:3498:27: sparse: expected unsigned long long drivers/md/dm-integrity.c:3498:27: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:3499:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:3499:27: sparse: expected unsigned long long drivers/md/dm-integrity.c:3499:27: sparse: got restricted __le64 [usertype] drivers/md/dm-integrity.c:3653:52: sparse: sparse: incorrect type in initializer (different base types) @@ expected unsigned int [usertype] section_le @@ got restricted __le32 [usertype] @@ drivers/md/dm-integrity.c:3653:52: sparse: expected unsigned int [usertype] section_le drivers/md/dm-integrity.c:3653:52: sparse: got restricted __le32 [usertype] >> drivers/md/dm-integrity.c:3699:61: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected restricted __le64 [usertype] *var @@ got unsigned long long * @@ >> drivers/md/dm-integrity.c:3699:61: sparse: expected restricted __le64 [usertype] *var >> drivers/md/dm-integrity.c:3699:61: sparse: got unsigned long long * drivers/md/dm-integrity.c:4066:13: sparse: sparse: cast to restricted __le16 drivers/md/dm-integrity.c:4076:14: sparse: sparse: cast to restricted __le32 drivers/md/dm-integrity.c:4096:32: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:4174:55: sparse: sparse: restricted __le32 degrades to integer drivers/md/dm-integrity.c:4175:31: sparse: sparse: invalid assignment: |= drivers/md/dm-integrity.c:4175:31: sparse: left side has type unsigned int drivers/md/dm-integrity.c:4175:31: sparse: right side has type restricted __le32 drivers/md/dm-integrity.c:4176:39: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] recalc_sector @@ got restricted __le64 [usertype] @@ drivers/md/dm-integrity.c:4176:39: sparse: expected unsigned long long [usertype] recalc_sector drivers/md/dm-integrity.c:4176:39: sparse: got restricted __le64 [usertype] # https://github.com/0day-ci/linux/commit/d0fe72210efe84e8e9c90b1650eb8a5728378dbe git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Liu-Shixin/dm-integrity-convert-to-use-le64_add_cpu/20200914-115650 git checkout d0fe72210efe84e8e9c90b1650eb8a5728378dbe vim +3699 drivers/md/dm-integrity.c 3487 3488 static int create_journal(struct dm_integrity_c *ic, char **error) 3489 { 3490 int r = 0; 3491 unsigned i; 3492 __u64 journal_pages, journal_desc_size, journal_tree_size; 3493 unsigned char *crypt_data = NULL, *crypt_iv = NULL; 3494 struct skcipher_request *req = NULL; 3495 3496 ic->commit_ids[0] = cpu_to_le64(0x1111111111111111ULL); 3497 ic->commit_ids[1] = cpu_to_le64(0x2222222222222222ULL); 3498 ic->commit_ids[2] = cpu_to_le64(0x3333333333333333ULL); 3499 ic->commit_ids[3] = cpu_to_le64(0x4444444444444444ULL); 3500 3501 journal_pages = roundup((__u64)ic->journal_sections * ic->journal_section_sectors, 3502 PAGE_SIZE >> SECTOR_SHIFT) >> (PAGE_SHIFT - SECTOR_SHIFT); 3503 journal_desc_size = journal_pages * sizeof(struct page_list); 3504 if (journal_pages >= totalram_pages() - totalhigh_pages() || journal_desc_size > ULONG_MAX) { 3505 *error = "Journal doesn't fit into memory"; 3506 r = -ENOMEM; 3507 goto bad; 3508 } 3509 ic->journal_pages = journal_pages; 3510 3511 ic->journal = dm_integrity_alloc_page_list(ic->journal_pages); 3512 if (!ic->journal) { 3513 *error = "Could not allocate memory for journal"; 3514 r = -ENOMEM; 3515 goto bad; 3516 } 3517 if (ic->journal_crypt_alg.alg_string) { 3518 unsigned ivsize, blocksize; 3519 struct journal_completion comp; 3520 3521 comp.ic = ic; 3522 ic->journal_crypt = crypto_alloc_skcipher(ic->journal_crypt_alg.alg_string, 0, 0); 3523 if (IS_ERR(ic->journal_crypt)) { 3524 *error = "Invalid journal cipher"; 3525 r = PTR_ERR(ic->journal_crypt); 3526 ic->journal_crypt = NULL; 3527 goto bad; 3528 } 3529 ivsize = crypto_skcipher_ivsize(ic->journal_crypt); 3530 blocksize = crypto_skcipher_blocksize(ic->journal_crypt); 3531 3532 if (ic->journal_crypt_alg.key) { 3533 r = crypto_skcipher_setkey(ic->journal_crypt, ic->journal_crypt_alg.key, 3534 ic->journal_crypt_alg.key_size); 3535 if (r) { 3536 *error = "Error setting encryption key"; 3537 goto bad; 3538 } 3539 } 3540 DEBUG_print("cipher %s, block size %u iv size %u\n", 3541 ic->journal_crypt_alg.alg_string, blocksize, ivsize); 3542 3543 ic->journal_io = dm_integrity_alloc_page_list(ic->journal_pages); 3544 if (!ic->journal_io) { 3545 *error = "Could not allocate memory for journal io"; 3546 r = -ENOMEM; 3547 goto bad; 3548 } 3549 3550 if (blocksize == 1) { 3551 struct scatterlist *sg; 3552 3553 req = skcipher_request_alloc(ic->journal_crypt, GFP_KERNEL); 3554 if (!req) { 3555 *error = "Could not allocate crypt request"; 3556 r = -ENOMEM; 3557 goto bad; 3558 } 3559 3560 crypt_iv = kzalloc(ivsize, GFP_KERNEL); 3561 if (!crypt_iv) { 3562 *error = "Could not allocate iv"; 3563 r = -ENOMEM; 3564 goto bad; 3565 } 3566 3567 ic->journal_xor = dm_integrity_alloc_page_list(ic->journal_pages); 3568 if (!ic->journal_xor) { 3569 *error = "Could not allocate memory for journal xor"; 3570 r = -ENOMEM; 3571 goto bad; 3572 } 3573 3574 sg = kvmalloc_array(ic->journal_pages + 1, 3575 sizeof(struct scatterlist), 3576 GFP_KERNEL); 3577 if (!sg) { 3578 *error = "Unable to allocate sg list"; 3579 r = -ENOMEM; 3580 goto bad; 3581 } 3582 sg_init_table(sg, ic->journal_pages + 1); 3583 for (i = 0; i < ic->journal_pages; i++) { 3584 char *va = lowmem_page_address(ic->journal_xor[i].page); 3585 clear_page(va); 3586 sg_set_buf(&sg[i], va, PAGE_SIZE); 3587 } 3588 sg_set_buf(&sg[i], &ic->commit_ids, sizeof ic->commit_ids); 3589 3590 skcipher_request_set_crypt(req, sg, sg, 3591 PAGE_SIZE * ic->journal_pages + sizeof ic->commit_ids, crypt_iv); 3592 init_completion(&comp.comp); 3593 comp.in_flight = (atomic_t)ATOMIC_INIT(1); 3594 if (do_crypt(true, req, &comp)) 3595 wait_for_completion(&comp.comp); 3596 kvfree(sg); 3597 r = dm_integrity_failed(ic); 3598 if (r) { 3599 *error = "Unable to encrypt journal"; 3600 goto bad; 3601 } 3602 DEBUG_bytes(lowmem_page_address(ic->journal_xor[0].page), 64, "xor data"); 3603 3604 crypto_free_skcipher(ic->journal_crypt); 3605 ic->journal_crypt = NULL; 3606 } else { 3607 unsigned crypt_len = roundup(ivsize, blocksize); 3608 3609 req = skcipher_request_alloc(ic->journal_crypt, GFP_KERNEL); 3610 if (!req) { 3611 *error = "Could not allocate crypt request"; 3612 r = -ENOMEM; 3613 goto bad; 3614 } 3615 3616 crypt_iv = kmalloc(ivsize, GFP_KERNEL); 3617 if (!crypt_iv) { 3618 *error = "Could not allocate iv"; 3619 r = -ENOMEM; 3620 goto bad; 3621 } 3622 3623 crypt_data = kmalloc(crypt_len, GFP_KERNEL); 3624 if (!crypt_data) { 3625 *error = "Unable to allocate crypt data"; 3626 r = -ENOMEM; 3627 goto bad; 3628 } 3629 3630 ic->journal_scatterlist = dm_integrity_alloc_journal_scatterlist(ic, ic->journal); 3631 if (!ic->journal_scatterlist) { 3632 *error = "Unable to allocate sg list"; 3633 r = -ENOMEM; 3634 goto bad; 3635 } 3636 ic->journal_io_scatterlist = dm_integrity_alloc_journal_scatterlist(ic, ic->journal_io); 3637 if (!ic->journal_io_scatterlist) { 3638 *error = "Unable to allocate sg list"; 3639 r = -ENOMEM; 3640 goto bad; 3641 } 3642 ic->sk_requests = kvmalloc_array(ic->journal_sections, 3643 sizeof(struct skcipher_request *), 3644 GFP_KERNEL | __GFP_ZERO); 3645 if (!ic->sk_requests) { 3646 *error = "Unable to allocate sk requests"; 3647 r = -ENOMEM; 3648 goto bad; 3649 } 3650 for (i = 0; i < ic->journal_sections; i++) { 3651 struct scatterlist sg; 3652 struct skcipher_request *section_req; 3653 __u32 section_le = cpu_to_le32(i); 3654 3655 memset(crypt_iv, 0x00, ivsize); 3656 memset(crypt_data, 0x00, crypt_len); 3657 memcpy(crypt_data, §ion_le, min((size_t)crypt_len, sizeof(section_le))); 3658 3659 sg_init_one(&sg, crypt_data, crypt_len); 3660 skcipher_request_set_crypt(req, &sg, &sg, crypt_len, crypt_iv); 3661 init_completion(&comp.comp); 3662 comp.in_flight = (atomic_t)ATOMIC_INIT(1); 3663 if (do_crypt(true, req, &comp)) 3664 wait_for_completion(&comp.comp); 3665 3666 r = dm_integrity_failed(ic); 3667 if (r) { 3668 *error = "Unable to generate iv"; 3669 goto bad; 3670 } 3671 3672 section_req = skcipher_request_alloc(ic->journal_crypt, GFP_KERNEL); 3673 if (!section_req) { 3674 *error = "Unable to allocate crypt request"; 3675 r = -ENOMEM; 3676 goto bad; 3677 } 3678 section_req->iv = kmalloc_array(ivsize, 2, 3679 GFP_KERNEL); 3680 if (!section_req->iv) { 3681 skcipher_request_free(section_req); 3682 *error = "Unable to allocate iv"; 3683 r = -ENOMEM; 3684 goto bad; 3685 } 3686 memcpy(section_req->iv + ivsize, crypt_data, ivsize); 3687 section_req->cryptlen = (size_t)ic->journal_section_sectors << SECTOR_SHIFT; 3688 ic->sk_requests[i] = section_req; 3689 DEBUG_bytes(crypt_data, ivsize, "iv(%u)", i); 3690 } 3691 } 3692 } 3693 3694 for (i = 0; i < N_COMMIT_IDS; i++) { 3695 unsigned j; 3696 retest_commit_id: 3697 for (j = 0; j < i; j++) { 3698 if (ic->commit_ids[j] == ic->commit_ids[i]) { > 3699 le64_add_cpu(&ic->commit_ids[i], 1); 3700 goto retest_commit_id; 3701 } 3702 } 3703 DEBUG_print("commit id %u: %016llx\n", i, ic->commit_ids[i]); 3704 } 3705 3706 journal_tree_size = (__u64)ic->journal_entries * sizeof(struct journal_node); 3707 if (journal_tree_size > ULONG_MAX) { 3708 *error = "Journal doesn't fit into memory"; 3709 r = -ENOMEM; 3710 goto bad; 3711 } 3712 ic->journal_tree = kvmalloc(journal_tree_size, GFP_KERNEL); 3713 if (!ic->journal_tree) { 3714 *error = "Could not allocate memory for journal tree"; 3715 r = -ENOMEM; 3716 } 3717 bad: 3718 kfree(crypt_data); 3719 kfree(crypt_iv); 3720 skcipher_request_free(req); 3721 3722 return r; 3723 } 3724 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip
-- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel