CC: [email protected] CC: [email protected] CC: Linux Memory Management List <[email protected]> TO: Andy Shevchenko <[email protected]> CC: Heiko Stuebner <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: c122052c3cb861b3e61a01d2c2ab9069e470663e commit: e4dd7fd5ff0acb3f3ed290f52afe20fd840d22b0 [1772/8462] pinctrl/rockchip: Use temporary variable for struct device :::::: branch date: 7 hours ago :::::: commit date: 4 weeks ago config: arm-randconfig-c002-20211209 (https://download.01.org/0day-ci/archive/20211218/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 097a1cb1d5ebb3a0ec4bcaed8ba3ff6a8e33c00a) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install arm cross compiling tool for clang build # apt-get install binutils-arm-linux-gnueabi # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=e4dd7fd5ff0acb3f3ed290f52afe20fd840d22b0 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout e4dd7fd5ff0acb3f3ed290f52afe20fd840d22b0 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) 8 warnings generated. Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. drivers/gpu/drm/drm_syncobj.c:559:2: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] drm_syncobj_put(syncobj); ^ drivers/gpu/drm/drm_syncobj.c:772:2: note: Taking false branch if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ)) ^ drivers/gpu/drm/drm_syncobj.c:776:6: note: Assuming the condition is false if (args->flags & ~DRM_SYNCOBJ_CREATE_SIGNALED) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:776:2: note: Taking false branch if (args->flags & ~DRM_SYNCOBJ_CREATE_SIGNALED) ^ drivers/gpu/drm/drm_syncobj.c:779:9: note: Calling 'drm_syncobj_create_as_handle' return drm_syncobj_create_as_handle(file_private, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:554:8: note: Calling 'drm_syncobj_create' ret = drm_syncobj_create(&syncobj, flags, NULL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:489:6: note: Assuming 'syncobj' is non-null if (!syncobj) ^~~~~~~~ drivers/gpu/drm/drm_syncobj.c:489:2: note: Taking false branch if (!syncobj) ^ drivers/gpu/drm/drm_syncobj.c:494:2: note: Loop condition is false. Exiting loop spin_lock_init(&syncobj->lock); ^ include/linux/spinlock.h:339:34: note: expanded from macro 'spin_lock_init' # define spin_lock_init(_lock) \ ^ drivers/gpu/drm/drm_syncobj.c:496:6: note: Assuming the condition is false if (flags & DRM_SYNCOBJ_CREATE_SIGNALED) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:496:2: note: Taking false branch if (flags & DRM_SYNCOBJ_CREATE_SIGNALED) { ^ drivers/gpu/drm/drm_syncobj.c:504:6: note: 'fence' is null if (fence) ^~~~~ drivers/gpu/drm/drm_syncobj.c:504:2: note: Taking false branch if (fence) ^ drivers/gpu/drm/drm_syncobj.c:554:8: note: Returning from 'drm_syncobj_create' ret = drm_syncobj_create(&syncobj, flags, NULL); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:555:6: note: 'ret' is 0 if (ret) ^~~ drivers/gpu/drm/drm_syncobj.c:555:2: note: Taking false branch if (ret) ^ drivers/gpu/drm/drm_syncobj.c:558:8: note: Calling 'drm_syncobj_get_handle' ret = drm_syncobj_get_handle(file_private, syncobj, handle); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:538:6: note: Assuming 'ret' is < 0 if (ret < 0) { ^~~~~~~ drivers/gpu/drm/drm_syncobj.c:538:2: note: Taking true branch if (ret < 0) { ^ drivers/gpu/drm/drm_syncobj.c:539:3: note: Calling 'drm_syncobj_put' drm_syncobj_put(syncobj); ^~~~~~~~~~~~~~~~~~~~~~~~ include/drm/drm_syncobj.h:88:2: note: Calling 'kref_put' kref_put(&obj->refcount, drm_syncobj_free); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/kref.h:64:2: note: Taking true branch if (refcount_dec_and_test(&kref->refcount)) { ^ include/linux/kref.h:65:3: note: Calling 'drm_syncobj_free' release(kref); ^~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:466:2: note: Memory is released kfree(syncobj); ^~~~~~~~~~~~~~ include/linux/kref.h:65:3: note: Returning; memory was released release(kref); ^~~~~~~~~~~~~ include/drm/drm_syncobj.h:88:2: note: Returning; memory was released kref_put(&obj->refcount, drm_syncobj_free); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:539:3: note: Returning; memory was released via 1st parameter drm_syncobj_put(syncobj); ^~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:558:8: note: Returning; memory was released via 2nd parameter ret = drm_syncobj_get_handle(file_private, syncobj, handle); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/drm_syncobj.c:559:2: note: Use of memory after it is freed drm_syncobj_put(syncobj); ^ ~~~~~~~ Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. >> drivers/pinctrl/pinctrl-rockchip.c:912:17: warning: Value stored to 'dev' >> during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = info->dev; ^~~ ~~~~~~~~~ drivers/pinctrl/pinctrl-rockchip.c:912:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = info->dev; ^~~ ~~~~~~~~~ drivers/pinctrl/pinctrl-rockchip.c:1965:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = info->dev; ^~~ ~~~~~~~~~ drivers/pinctrl/pinctrl-rockchip.c:1965:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = info->dev; ^~~ ~~~~~~~~~ drivers/pinctrl/pinctrl-rockchip.c:2031:17: warning: Value stored to 'dev' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct device *dev = info->dev; ^~~ ~~~~~~~~~ drivers/pinctrl/pinctrl-rockchip.c:2031:17: note: Value stored to 'dev' during its initialization is never read struct device *dev = info->dev; ^~~ ~~~~~~~~~ include/linux/list.h:137:13: warning: Use of memory after it is freed [clang-analyzer-unix.Malloc] __list_del(entry->prev, entry->next); ^ drivers/pinctrl/pinctrl-rockchip.c:2759:14: note: Assuming 'i' is < field 'nr_banks' for (i = 0; i < info->ctrl->nr_banks; i++) { ^~~~~~~~~~~~~~~~~~~~~~~~ drivers/pinctrl/pinctrl-rockchip.c:2759:2: note: Loop condition is true. Entering loop body for (i = 0; i < info->ctrl->nr_banks; i++) { ^ drivers/pinctrl/pinctrl-rockchip.c:2763:3: note: Loop condition is true. Entering loop body while (!list_empty(&bank->deferred_output)) { ^ drivers/pinctrl/pinctrl-rockchip.c:2767:4: note: Memory is released kfree(cfg); ^~~~~~~~~~ drivers/pinctrl/pinctrl-rockchip.c:2763:3: note: Loop condition is true. Entering loop body while (!list_empty(&bank->deferred_output)) { ^ drivers/pinctrl/pinctrl-rockchip.c:2766:4: note: Calling 'list_del' list_del(&cfg->head); ^~~~~~~~~~~~~~~~~~~~ include/linux/list.h:148:2: note: Calling '__list_del_entry' __list_del_entry(entry); ^~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:134:2: note: Taking false branch if (!__list_del_entry_valid(entry)) ^ include/linux/list.h:137:13: note: Use of memory after it is freed __list_del(entry->prev, entry->next); ^~~~~~~~~~~ Suppressed 10 warnings (10 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 10 warnings generated. drivers/gpio/gpio-adnp.c:385:28: warning: The result of the left shift is undefined due to shifting by '4294967292', which is greater or equal to the width of type 'int' [clang-analyzer-core.UndefinedBinaryOperatorResult] unsigned int num_regs = 1 << adnp->reg_shift, i; ^ drivers/gpio/gpio-adnp.c:498:6: note: 'err' is >= 0 if (err < 0) ^~~ drivers/gpio/gpio-adnp.c:498:2: note: Taking false branch if (err < 0) ^ drivers/gpio/gpio-adnp.c:502:6: note: Assuming field 'irq' is not equal to 0 if (!client->irq) ^~~~~~~~~~~~ drivers/gpio/gpio-adnp.c:502:2: note: Taking false branch if (!client->irq) ^ drivers/gpio/gpio-adnp.c:506:6: note: Assuming 'adnp' is non-null if (!adnp) ^~~~~ drivers/gpio/gpio-adnp.c:506:2: note: Taking false branch if (!adnp) ^ drivers/gpio/gpio-adnp.c:509:2: note: Loop condition is false. Exiting loop mutex_init(&adnp->i2c_lock); ^ include/linux/mutex.h:101:32: note: expanded from macro 'mutex_init' #define mutex_init(mutex) \ ^ drivers/gpio/gpio-adnp.c:512:8: note: Calling 'adnp_gpio_setup' err = adnp_gpio_setup(adnp, num_gpios, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpio/gpio-adnp.c:446:2: note: The value 4294967292 is assigned to field 'reg_shift' adnp->reg_shift = get_count_order(num_gpios) - 3; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpio/gpio-adnp.c:454:2: note: Taking true branch if (IS_ENABLED(CONFIG_DEBUG_FS)) ^ drivers/gpio/gpio-adnp.c:464:6: note: 'is_irq_controller' is true if (is_irq_controller) { ^~~~~~~~~~~~~~~~~ drivers/gpio/gpio-adnp.c:464:2: note: Taking true branch if (is_irq_controller) { ^ drivers/gpio/gpio-adnp.c:467:9: note: Calling 'adnp_irq_setup' err = adnp_irq_setup(adnp); ^~~~~~~~~~~~~~~~~~~~ drivers/gpio/gpio-adnp.c:385:28: note: The result of the left shift is undefined due to shifting by '4294967292', which is greater or equal to the width of type 'int' unsigned int num_regs = 1 << adnp->reg_shift, i; vim +/dev +912 drivers/pinctrl/pinctrl-rockchip.c 05709c3e88f5f0 John Keeping 2017-03-23 895 d3e5116119bd02 Heiko Stübner 2013-06-10 896 /* d3e5116119bd02 Heiko Stübner 2013-06-10 897 * Set a new mux function for a pin. d3e5116119bd02 Heiko Stübner 2013-06-10 898 * d3e5116119bd02 Heiko Stübner 2013-06-10 899 * The register is divided into the upper and lower 16 bit. When changing d3e5116119bd02 Heiko Stübner 2013-06-10 900 * a value, the previous register value is not read and changed. Instead d3e5116119bd02 Heiko Stübner 2013-06-10 901 * it seems the changed bits are marked in the upper 16 bit, while the d3e5116119bd02 Heiko Stübner 2013-06-10 902 * changed value gets set in the same offset in the lower 16 bit. d3e5116119bd02 Heiko Stübner 2013-06-10 903 * All pin settings seem to be 2 bit wide in both the upper and lower d3e5116119bd02 Heiko Stübner 2013-06-10 904 * parts. d3e5116119bd02 Heiko Stübner 2013-06-10 905 * @bank: pin bank to change d3e5116119bd02 Heiko Stübner 2013-06-10 906 * @pin: pin to change d3e5116119bd02 Heiko Stübner 2013-06-10 907 * @mux: new mux function to set d3e5116119bd02 Heiko Stübner 2013-06-10 908 */ 14797189b35e9e Heiko Stübner 2014-03-26 909 static int rockchip_set_mux(struct rockchip_pin_bank *bank, int pin, int mux) d3e5116119bd02 Heiko Stübner 2013-06-10 910 { d3e5116119bd02 Heiko Stübner 2013-06-10 911 struct rockchip_pinctrl *info = bank->drvdata; e4dd7fd5ff0acb Andy Shevchenko 2021-11-05 @912 struct device *dev = info->dev; fc72c923e50d5c Heiko Stübner 2014-06-16 913 int iomux_num = (pin / 8); 95ec8ae4498e99 Heiko Stübner 2014-06-16 914 struct regmap *regmap; ea262ad6e4019f david.wu 2017-02-10 915 int reg, ret, mask, mux_type; d3e5116119bd02 Heiko Stübner 2013-06-10 916 u8 bit; 51ff47aa4c933f Heiko Stuebner 2018-11-11 917 u32 data, rmask, route_location, route_reg, route_val; d3e5116119bd02 Heiko Stübner 2013-06-10 918 05709c3e88f5f0 John Keeping 2017-03-23 919 ret = rockchip_verify_mux(bank, pin, mux); 05709c3e88f5f0 John Keeping 2017-03-23 920 if (ret < 0) 05709c3e88f5f0 John Keeping 2017-03-23 921 return ret; 62f49226b03b64 Heiko Stübner 2014-06-16 922 05709c3e88f5f0 John Keeping 2017-03-23 923 if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY) c4a532dee6b6e4 Heiko Stübner 2014-03-26 924 return 0; c4a532dee6b6e4 Heiko Stübner 2014-03-26 925 e4dd7fd5ff0acb Andy Shevchenko 2021-11-05 926 dev_dbg(dev, "setting mux of GPIO%d-%d to %d\n", bank->bank_num, pin, mux); d3e5116119bd02 Heiko Stübner 2013-06-10 927 95ec8ae4498e99 Heiko Stübner 2014-06-16 928 regmap = (bank->iomux[iomux_num].type & IOMUX_SOURCE_PMU) 95ec8ae4498e99 Heiko Stübner 2014-06-16 929 ? info->regmap_pmu : info->regmap_base; 95ec8ae4498e99 Heiko Stübner 2014-06-16 930 d3e5116119bd02 Heiko Stübner 2013-06-10 931 /* get basic quadrupel of mux registers and the correct reg inside */ ea262ad6e4019f david.wu 2017-02-10 932 mux_type = bank->iomux[iomux_num].type; 6bc0d121a95b31 Heiko Stübner 2014-06-16 933 reg = bank->iomux[iomux_num].offset; ea262ad6e4019f david.wu 2017-02-10 934 if (mux_type & IOMUX_WIDTH_4BIT) { 03716e1dd01b0e Heiko Stübner 2014-06-16 935 if ((pin % 8) >= 4) 03716e1dd01b0e Heiko Stübner 2014-06-16 936 reg += 0x4; 03716e1dd01b0e Heiko Stübner 2014-06-16 937 bit = (pin % 4) * 4; 8b6c6f930da9d2 david.wu 2017-02-10 938 mask = 0xf; ea262ad6e4019f david.wu 2017-02-10 939 } else if (mux_type & IOMUX_WIDTH_3BIT) { 8b6c6f930da9d2 david.wu 2017-02-10 940 if ((pin % 8) >= 5) 8b6c6f930da9d2 david.wu 2017-02-10 941 reg += 0x4; 8b6c6f930da9d2 david.wu 2017-02-10 942 bit = (pin % 8 % 5) * 3; 8b6c6f930da9d2 david.wu 2017-02-10 943 mask = 0x7; 03716e1dd01b0e Heiko Stübner 2014-06-16 944 } else { d3e5116119bd02 Heiko Stübner 2013-06-10 945 bit = (pin % 8) * 2; 8b6c6f930da9d2 david.wu 2017-02-10 946 mask = 0x3; 03716e1dd01b0e Heiko Stübner 2014-06-16 947 } d3e5116119bd02 Heiko Stübner 2013-06-10 948 c04c3fa65ac5c6 David Wu 2017-07-21 949 if (bank->recalced_mask & BIT(pin)) c04c3fa65ac5c6 David Wu 2017-07-21 950 rockchip_get_recalced_mux(bank, pin, ®, &bit, &mask); ea262ad6e4019f david.wu 2017-02-10 951 bd35b9bf828433 David Wu 2017-05-26 952 if (bank->route_mask & BIT(pin)) { 51ff47aa4c933f Heiko Stuebner 2018-11-11 953 if (rockchip_get_mux_route(bank, pin, mux, &route_location, 51ff47aa4c933f Heiko Stuebner 2018-11-11 954 &route_reg, &route_val)) { 51ff47aa4c933f Heiko Stuebner 2018-11-11 955 struct regmap *route_regmap = regmap; 51ff47aa4c933f Heiko Stuebner 2018-11-11 956 51ff47aa4c933f Heiko Stuebner 2018-11-11 957 /* handle special locations */ 51ff47aa4c933f Heiko Stuebner 2018-11-11 958 switch (route_location) { 51ff47aa4c933f Heiko Stuebner 2018-11-11 959 case ROCKCHIP_ROUTE_PMU: 51ff47aa4c933f Heiko Stuebner 2018-11-11 960 route_regmap = info->regmap_pmu; 51ff47aa4c933f Heiko Stuebner 2018-11-11 961 break; 51ff47aa4c933f Heiko Stuebner 2018-11-11 962 case ROCKCHIP_ROUTE_GRF: 51ff47aa4c933f Heiko Stuebner 2018-11-11 963 route_regmap = info->regmap_base; 51ff47aa4c933f Heiko Stuebner 2018-11-11 964 break; 51ff47aa4c933f Heiko Stuebner 2018-11-11 965 } 51ff47aa4c933f Heiko Stuebner 2018-11-11 966 51ff47aa4c933f Heiko Stuebner 2018-11-11 967 ret = regmap_write(route_regmap, route_reg, route_val); bd35b9bf828433 David Wu 2017-05-26 968 if (ret) bd35b9bf828433 David Wu 2017-05-26 969 return ret; bd35b9bf828433 David Wu 2017-05-26 970 } bd35b9bf828433 David Wu 2017-05-26 971 } bd35b9bf828433 David Wu 2017-05-26 972 03716e1dd01b0e Heiko Stübner 2014-06-16 973 data = (mask << (bit + 16)); 99e872d953fb44 Sonny Rao 2014-07-31 974 rmask = data | (data >> 16); 03716e1dd01b0e Heiko Stübner 2014-06-16 975 data |= (mux & mask) << bit; 99e872d953fb44 Sonny Rao 2014-07-31 976 ret = regmap_update_bits(regmap, reg, rmask, data); d3e5116119bd02 Heiko Stübner 2013-06-10 977 751a99aba47e9b Heiko Stübner 2014-05-05 978 return ret; d3e5116119bd02 Heiko Stübner 2013-06-10 979 } d3e5116119bd02 Heiko Stübner 2013-06-10 980 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
