CC: kbuild-all(a)lists.01.org In-Reply-To: <20210215003249.GA12303@lupo-laptop> References: <20210215003249.GA12303@lupo-laptop> TO: Luca Porzio Hi Luca, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on next-20210212] [cannot apply to linus/master mmc/mmc-next v5.11-rc7 v5.11-rc6 v5.11-rc5 v5.11] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Luca-Porzio/Support-temporarily-disable-of-the-CMDQ-mode/20210215-083730 base: 07f7e57c63aaa2afb4ea31edef05e08699a63a00 :::::: branch date: 2 hours ago :::::: commit date: 2 hours ago config: i386-randconfig-m021-20210215 (attached as .config) compiler: gcc-9 (Debian 9.3.0-15) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot Reported-by: Dan Carpenter New smatch warnings: drivers/mmc/core/mmc.c:870 mmc_cmdq_setup() error: uninitialized symbol 'err'. drivers/mmc/core/mmc.c:889 cmdq_en_store() warn: variable dereferenced before check 'card' (see line 885) Old smatch warnings: drivers/mmc/core/mmc.c:774 mmc_erase_size_show() warn: should 'card->erase_size << 9' be a 64 bit type? drivers/mmc/core/mmc.c:775 mmc_preferred_erase_size_show() warn: should 'card->pref_erase << 9' be a 64 bit type? drivers/mmc/core/mmc.c:1072 mmc_select_powerclass() warn: should '1 << bus_width' be a 64 bit type? drivers/mmc/core/mmc.c:1159 mmc_select_bus_width() warn: should '1 << bus_width' be a 64 bit type? drivers/mmc/core/mmc.c:1211 mmc_select_hs_ddr() warn: should '1 << bus_width' be a 64 bit type? vim +/err +870 drivers/mmc/core/mmc.c 07a9ce0e702520 Luca Porzio 2021-02-15 797 07a9ce0e702520 Luca Porzio 2021-02-15 798 07a9ce0e702520 Luca Porzio 2021-02-15 799 /* Setup command queue mode and CQE if underling hw supports it 07a9ce0e702520 Luca Porzio 2021-02-15 800 * and assuming force_disable_cmdq has not been set. 07a9ce0e702520 Luca Porzio 2021-02-15 801 */ 07a9ce0e702520 Luca Porzio 2021-02-15 802 static int mmc_cmdq_setup(struct mmc_host *host, struct mmc_card *card) 07a9ce0e702520 Luca Porzio 2021-02-15 803 { 07a9ce0e702520 Luca Porzio 2021-02-15 804 int err; 07a9ce0e702520 Luca Porzio 2021-02-15 805 07a9ce0e702520 Luca Porzio 2021-02-15 806 /* Check HW support */ 07a9ce0e702520 Luca Porzio 2021-02-15 807 if (!card->ext_csd.cmdq_support || !(host->caps2 & MMC_CAP2_CQE)) 07a9ce0e702520 Luca Porzio 2021-02-15 808 card->force_disable_cmdq = true; 07a9ce0e702520 Luca Porzio 2021-02-15 809 07a9ce0e702520 Luca Porzio 2021-02-15 810 /* Enable/Disable CMDQ mode */ 07a9ce0e702520 Luca Porzio 2021-02-15 811 if (!card->ext_csd.cmdq_en && !card->force_disable_cmdq) { 07a9ce0e702520 Luca Porzio 2021-02-15 812 err = mmc_cmdq_enable(card); 07a9ce0e702520 Luca Porzio 2021-02-15 813 if (err && err != -EBADMSG) 07a9ce0e702520 Luca Porzio 2021-02-15 814 return err; 07a9ce0e702520 Luca Porzio 2021-02-15 815 if (err) { 07a9ce0e702520 Luca Porzio 2021-02-15 816 pr_warn("%s: Enabling CMDQ failed\n", 07a9ce0e702520 Luca Porzio 2021-02-15 817 mmc_hostname(card->host)); 07a9ce0e702520 Luca Porzio 2021-02-15 818 card->ext_csd.cmdq_support = false; 07a9ce0e702520 Luca Porzio 2021-02-15 819 card->ext_csd.cmdq_depth = 0; 07a9ce0e702520 Luca Porzio 2021-02-15 820 } 07a9ce0e702520 Luca Porzio 2021-02-15 821 07a9ce0e702520 Luca Porzio 2021-02-15 822 } else if (card->ext_csd.cmdq_en && card->force_disable_cmdq) { 07a9ce0e702520 Luca Porzio 2021-02-15 823 err = mmc_cmdq_disable(card); 07a9ce0e702520 Luca Porzio 2021-02-15 824 if (err) { 07a9ce0e702520 Luca Porzio 2021-02-15 825 pr_warn("%s: Disabling CMDQ failed, error %d\n", 07a9ce0e702520 Luca Porzio 2021-02-15 826 mmc_hostname(card->host), err); 07a9ce0e702520 Luca Porzio 2021-02-15 827 err = 0; 07a9ce0e702520 Luca Porzio 2021-02-15 828 } 07a9ce0e702520 Luca Porzio 2021-02-15 829 } 07a9ce0e702520 Luca Porzio 2021-02-15 830 07a9ce0e702520 Luca Porzio 2021-02-15 831 /* 07a9ce0e702520 Luca Porzio 2021-02-15 832 * In some cases (e.g. RPMB or mmc_test), the Command Queue must be 07a9ce0e702520 Luca Porzio 2021-02-15 833 * disabled for a time, so a flag is needed to indicate to re-enable the 07a9ce0e702520 Luca Porzio 2021-02-15 834 * Command Queue. 07a9ce0e702520 Luca Porzio 2021-02-15 835 */ 07a9ce0e702520 Luca Porzio 2021-02-15 836 card->reenable_cmdq = card->ext_csd.cmdq_en; 07a9ce0e702520 Luca Porzio 2021-02-15 837 07a9ce0e702520 Luca Porzio 2021-02-15 838 /* Enable/Disable Host CQE */ 07a9ce0e702520 Luca Porzio 2021-02-15 839 if (!card->force_disable_cmdq) { 07a9ce0e702520 Luca Porzio 2021-02-15 840 07a9ce0e702520 Luca Porzio 2021-02-15 841 if (host->cqe_ops && !host->cqe_enabled) { 07a9ce0e702520 Luca Porzio 2021-02-15 842 err = host->cqe_ops->cqe_enable(host, card); 07a9ce0e702520 Luca Porzio 2021-02-15 843 if (!err) { 07a9ce0e702520 Luca Porzio 2021-02-15 844 host->cqe_enabled = true; 07a9ce0e702520 Luca Porzio 2021-02-15 845 07a9ce0e702520 Luca Porzio 2021-02-15 846 if (card->ext_csd.cmdq_en) { 07a9ce0e702520 Luca Porzio 2021-02-15 847 pr_info("%s: Command Queue Engine enabled\n", 07a9ce0e702520 Luca Porzio 2021-02-15 848 mmc_hostname(host)); 07a9ce0e702520 Luca Porzio 2021-02-15 849 } else { 07a9ce0e702520 Luca Porzio 2021-02-15 850 host->hsq_enabled = true; 07a9ce0e702520 Luca Porzio 2021-02-15 851 pr_info("%s: Host Software Queue enabled\n", 07a9ce0e702520 Luca Porzio 2021-02-15 852 mmc_hostname(host)); 07a9ce0e702520 Luca Porzio 2021-02-15 853 } 07a9ce0e702520 Luca Porzio 2021-02-15 854 } 07a9ce0e702520 Luca Porzio 2021-02-15 855 } 07a9ce0e702520 Luca Porzio 2021-02-15 856 07a9ce0e702520 Luca Porzio 2021-02-15 857 } else { 07a9ce0e702520 Luca Porzio 2021-02-15 858 07a9ce0e702520 Luca Porzio 2021-02-15 859 if (host->cqe_enabled) { 07a9ce0e702520 Luca Porzio 2021-02-15 860 host->cqe_ops->cqe_disable(host); 07a9ce0e702520 Luca Porzio 2021-02-15 861 host->cqe_enabled = false; 07a9ce0e702520 Luca Porzio 2021-02-15 862 pr_info("%s: Command Queue Engine disabled\n", 07a9ce0e702520 Luca Porzio 2021-02-15 863 mmc_hostname(host)); 07a9ce0e702520 Luca Porzio 2021-02-15 864 } 07a9ce0e702520 Luca Porzio 2021-02-15 865 07a9ce0e702520 Luca Porzio 2021-02-15 866 host->hsq_enabled = false; 07a9ce0e702520 Luca Porzio 2021-02-15 867 err = 0; 07a9ce0e702520 Luca Porzio 2021-02-15 868 } 07a9ce0e702520 Luca Porzio 2021-02-15 869 07a9ce0e702520 Luca Porzio 2021-02-15 @870 return err; 07a9ce0e702520 Luca Porzio 2021-02-15 871 } 07a9ce0e702520 Luca Porzio 2021-02-15 872 07a9ce0e702520 Luca Porzio 2021-02-15 873 07a9ce0e702520 Luca Porzio 2021-02-15 874 static ssize_t cmdq_en_show(struct device *dev, struct device_attribute *attr, char *buf) 07a9ce0e702520 Luca Porzio 2021-02-15 875 { 07a9ce0e702520 Luca Porzio 2021-02-15 876 struct mmc_card *card = mmc_dev_to_card(dev); 07a9ce0e702520 Luca Porzio 2021-02-15 877 07a9ce0e702520 Luca Porzio 2021-02-15 878 return sprintf(buf, "%d\n", card->ext_csd.cmdq_en); 07a9ce0e702520 Luca Porzio 2021-02-15 879 } 07a9ce0e702520 Luca Porzio 2021-02-15 880 07a9ce0e702520 Luca Porzio 2021-02-15 881 static ssize_t cmdq_en_store(struct device *dev, struct device_attribute *attr, 07a9ce0e702520 Luca Porzio 2021-02-15 882 const char *buf, size_t count) 07a9ce0e702520 Luca Porzio 2021-02-15 883 { 07a9ce0e702520 Luca Porzio 2021-02-15 884 struct mmc_card *card = mmc_dev_to_card(dev); 07a9ce0e702520 Luca Porzio 2021-02-15 @885 struct mmc_host *host = card->host; 07a9ce0e702520 Luca Porzio 2021-02-15 886 unsigned long enable; 07a9ce0e702520 Luca Porzio 2021-02-15 887 int err; 07a9ce0e702520 Luca Porzio 2021-02-15 888 07a9ce0e702520 Luca Porzio 2021-02-15 @889 if (!card || kstrtoul(buf, 0, &enable)) 07a9ce0e702520 Luca Porzio 2021-02-15 890 return -EINVAL; 07a9ce0e702520 Luca Porzio 2021-02-15 891 if (!card->ext_csd.cmdq_support) 07a9ce0e702520 Luca Porzio 2021-02-15 892 return -EOPNOTSUPP; 07a9ce0e702520 Luca Porzio 2021-02-15 893 07a9ce0e702520 Luca Porzio 2021-02-15 894 enable = !!enable; 07a9ce0e702520 Luca Porzio 2021-02-15 895 if (enable == card->ext_csd.cmdq_en) 07a9ce0e702520 Luca Porzio 2021-02-15 896 return count; 07a9ce0e702520 Luca Porzio 2021-02-15 897 07a9ce0e702520 Luca Porzio 2021-02-15 898 mmc_get_card(card, NULL); 07a9ce0e702520 Luca Porzio 2021-02-15 899 card->force_disable_cmdq = !enable; 07a9ce0e702520 Luca Porzio 2021-02-15 900 err = mmc_cmdq_setup(host, card); 07a9ce0e702520 Luca Porzio 2021-02-15 901 mmc_put_card(card, NULL); 07a9ce0e702520 Luca Porzio 2021-02-15 902 07a9ce0e702520 Luca Porzio 2021-02-15 903 if (err) 07a9ce0e702520 Luca Porzio 2021-02-15 904 return err; 07a9ce0e702520 Luca Porzio 2021-02-15 905 else 07a9ce0e702520 Luca Porzio 2021-02-15 906 return count; 07a9ce0e702520 Luca Porzio 2021-02-15 907 } 07a9ce0e702520 Luca Porzio 2021-02-15 908 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org