Re: [PATCH 1/2] bus: mhi: host: Add quirk framework and initial quirk

From: kernel test robot
Date: Sat Apr 15 2023 - 10:24:03 EST


Hi Jeffrey,

kernel test robot noticed the following build errors:

[auto build test ERROR on drm-misc/drm-misc-next]
[also build test ERROR on drm-tip/drm-tip linus/master v6.3-rc6]
[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#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Jeffrey-Hugo/bus-mhi-host-Add-quirk-framework-and-initial-quirk/20230415-035846
base: git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
patch link: https://lore.kernel.org/r/1681502239-3781-2-git-send-email-quic_jhugo%40quicinc.com
patch subject: [PATCH 1/2] bus: mhi: host: Add quirk framework and initial quirk
config: i386-randconfig-r036-20230410 (https://download.01.org/0day-ci/archive/20230415/202304152256.QzCwI9iu-lkp@xxxxxxxxx/config)
compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1)
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
# https://github.com/intel-lab-lkp/linux/commit/678cad31c3c8f1b6d772150b98d25e40240e4e14
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Jeffrey-Hugo/bus-mhi-host-Add-quirk-framework-and-initial-quirk/20230415-035846
git checkout 678cad31c3c8f1b6d772150b98d25e40240e4e14
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Link: https://lore.kernel.org/oe-kbuild-all/202304152256.QzCwI9iu-lkp@xxxxxxxxx/

All errors (new ones prefixed by >>):

>> drivers/bus/mhi/host/init.c:977:2: error: expected expression
else {
^
>> drivers/bus/mhi/host/init.c:1043:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1072:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1082:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1088:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1170:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1189:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1208:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1236:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1312:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1382:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1398:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1404:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1412:1: error: function definition is not allowed here
{
^
>> drivers/bus/mhi/host/init.c:1436:11: error: use of undeclared identifier 'mhi_match'
.match = mhi_match,
^
>> drivers/bus/mhi/host/init.c:1437:12: error: use of undeclared identifier 'mhi_uevent'; did you mean 'mhi_event'?
.uevent = mhi_uevent,
^~~~~~~~~~
mhi_event
drivers/bus/mhi/host/init.c:895:20: note: 'mhi_event' declared here
struct mhi_event *mhi_event;
^
drivers/bus/mhi/host/init.c:1442:1: error: function definition is not allowed here
{
^
drivers/bus/mhi/host/init.c:1448:1: error: function definition is not allowed here
{
^
>> drivers/bus/mhi/host/init.c:1453:19: error: use of undeclared identifier 'mhi_init'
postcore_initcall(mhi_init);
^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.


vim +977 drivers/bus/mhi/host/init.c

891
892 int mhi_register_controller(struct mhi_controller *mhi_cntrl,
893 const struct mhi_controller_config *config)
894 {
895 struct mhi_event *mhi_event;
896 struct mhi_chan *mhi_chan;
897 struct mhi_cmd *mhi_cmd;
898 struct mhi_device *mhi_dev;
899 u32 soc_info;
900 int ret, i;
901
902 if (!mhi_cntrl || !mhi_cntrl->cntrl_dev || !mhi_cntrl->regs ||
903 !mhi_cntrl->runtime_get || !mhi_cntrl->runtime_put ||
904 !mhi_cntrl->status_cb || !mhi_cntrl->read_reg ||
905 !mhi_cntrl->write_reg || !mhi_cntrl->nr_irqs ||
906 !mhi_cntrl->irq || !mhi_cntrl->reg_len)
907 return -EINVAL;
908
909 ret = parse_config(mhi_cntrl, config);
910 if (ret)
911 return -EINVAL;
912
913 mhi_cntrl->mhi_cmd = kcalloc(NR_OF_CMD_RINGS,
914 sizeof(*mhi_cntrl->mhi_cmd), GFP_KERNEL);
915 if (!mhi_cntrl->mhi_cmd) {
916 ret = -ENOMEM;
917 goto err_free_event;
918 }
919
920 INIT_LIST_HEAD(&mhi_cntrl->transition_list);
921 mutex_init(&mhi_cntrl->pm_mutex);
922 rwlock_init(&mhi_cntrl->pm_lock);
923 spin_lock_init(&mhi_cntrl->transition_lock);
924 spin_lock_init(&mhi_cntrl->wlock);
925 INIT_WORK(&mhi_cntrl->st_worker, mhi_pm_st_worker);
926 init_waitqueue_head(&mhi_cntrl->state_event);
927
928 mhi_cntrl->hiprio_wq = alloc_ordered_workqueue("mhi_hiprio_wq", WQ_HIGHPRI);
929 if (!mhi_cntrl->hiprio_wq) {
930 dev_err(mhi_cntrl->cntrl_dev, "Failed to allocate workqueue\n");
931 ret = -ENOMEM;
932 goto err_free_cmd;
933 }
934
935 mhi_cmd = mhi_cntrl->mhi_cmd;
936 for (i = 0; i < NR_OF_CMD_RINGS; i++, mhi_cmd++)
937 spin_lock_init(&mhi_cmd->lock);
938
939 mhi_event = mhi_cntrl->mhi_event;
940 for (i = 0; i < mhi_cntrl->total_ev_rings; i++, mhi_event++) {
941 /* Skip for offload events */
942 if (mhi_event->offload_ev)
943 continue;
944
945 mhi_event->mhi_cntrl = mhi_cntrl;
946 spin_lock_init(&mhi_event->lock);
947 if (mhi_event->data_type == MHI_ER_CTRL)
948 tasklet_init(&mhi_event->task, mhi_ctrl_ev_task,
949 (ulong)mhi_event);
950 else
951 tasklet_init(&mhi_event->task, mhi_ev_task,
952 (ulong)mhi_event);
953 }
954
955 mhi_chan = mhi_cntrl->mhi_chan;
956 for (i = 0; i < mhi_cntrl->max_chan; i++, mhi_chan++) {
957 mutex_init(&mhi_chan->mutex);
958 init_completion(&mhi_chan->completion);
959 rwlock_init(&mhi_chan->lock);
960
961 /* used in setting bei field of TRE */
962 mhi_event = &mhi_cntrl->mhi_event[mhi_chan->er_index];
963 mhi_chan->intmod = mhi_event->intmod;
964 }
965
966 if (mhi_cntrl->bounce_buf) {
967 mhi_cntrl->map_single = mhi_map_single_use_bb;
968 mhi_cntrl->unmap_single = mhi_unmap_single_use_bb;
969 } else {
970 mhi_cntrl->map_single = mhi_map_single_no_bb;
971 mhi_cntrl->unmap_single = mhi_unmap_single_no_bb;
972 }
973
974 /* Read the MHI device info */
975 if (mhi_cntrl->quirks & MHI_QUIRK_SOC_HW_VERSION_UNRELIABLE) {
976 soc_info = 0;
> 977 else {
978 ret = mhi_read_reg(mhi_cntrl, mhi_cntrl->regs, SOC_HW_VERSION_OFFS, &soc_info);
979 if (ret)
980 goto err_destroy_wq;
981 }
982
983 mhi_cntrl->family_number = FIELD_GET(SOC_HW_VERSION_FAM_NUM_BMSK, soc_info);
984 mhi_cntrl->device_number = FIELD_GET(SOC_HW_VERSION_DEV_NUM_BMSK, soc_info);
985 mhi_cntrl->major_version = FIELD_GET(SOC_HW_VERSION_MAJOR_VER_BMSK, soc_info);
986 mhi_cntrl->minor_version = FIELD_GET(SOC_HW_VERSION_MINOR_VER_BMSK, soc_info);
987
988 mhi_cntrl->index = ida_alloc(&mhi_controller_ida, GFP_KERNEL);
989 if (mhi_cntrl->index < 0) {
990 ret = mhi_cntrl->index;
991 goto err_destroy_wq;
992 }
993
994 ret = mhi_init_irq_setup(mhi_cntrl);
995 if (ret)
996 goto err_ida_free;
997
998 /* Register controller with MHI bus */
999 mhi_dev = mhi_alloc_device(mhi_cntrl);
1000 if (IS_ERR(mhi_dev)) {
1001 dev_err(mhi_cntrl->cntrl_dev, "Failed to allocate MHI device\n");
1002 ret = PTR_ERR(mhi_dev);
1003 goto error_setup_irq;
1004 }
1005
1006 mhi_dev->dev_type = MHI_DEVICE_CONTROLLER;
1007 mhi_dev->mhi_cntrl = mhi_cntrl;
1008 dev_set_name(&mhi_dev->dev, "mhi%d", mhi_cntrl->index);
1009 mhi_dev->name = dev_name(&mhi_dev->dev);
1010
1011 /* Init wakeup source */
1012 device_init_wakeup(&mhi_dev->dev, true);
1013
1014 ret = device_add(&mhi_dev->dev);
1015 if (ret)
1016 goto err_release_dev;
1017
1018 mhi_cntrl->mhi_dev = mhi_dev;
1019
1020 mhi_create_debugfs(mhi_cntrl);
1021
1022 return 0;
1023
1024 err_release_dev:
1025 put_device(&mhi_dev->dev);
1026 error_setup_irq:
1027 mhi_deinit_free_irq(mhi_cntrl);
1028 err_ida_free:
1029 ida_free(&mhi_controller_ida, mhi_cntrl->index);
1030 err_destroy_wq:
1031 destroy_workqueue(mhi_cntrl->hiprio_wq);
1032 err_free_cmd:
1033 kfree(mhi_cntrl->mhi_cmd);
1034 err_free_event:
1035 kfree(mhi_cntrl->mhi_event);
1036 vfree(mhi_cntrl->mhi_chan);
1037
1038 return ret;
1039 }
1040 EXPORT_SYMBOL_GPL(mhi_register_controller);
1041
1042 void mhi_unregister_controller(struct mhi_controller *mhi_cntrl)
> 1043 {
1044 struct mhi_device *mhi_dev = mhi_cntrl->mhi_dev;
1045 struct mhi_chan *mhi_chan = mhi_cntrl->mhi_chan;
1046 unsigned int i;
1047
1048 mhi_deinit_free_irq(mhi_cntrl);
1049 mhi_destroy_debugfs(mhi_cntrl);
1050
1051 destroy_workqueue(mhi_cntrl->hiprio_wq);
1052 kfree(mhi_cntrl->mhi_cmd);
1053 kfree(mhi_cntrl->mhi_event);
1054
1055 /* Drop the references to MHI devices created for channels */
1056 for (i = 0; i < mhi_cntrl->max_chan; i++, mhi_chan++) {
1057 if (!mhi_chan->mhi_dev)
1058 continue;
1059
1060 put_device(&mhi_chan->mhi_dev->dev);
1061 }
1062 vfree(mhi_cntrl->mhi_chan);
1063
1064 device_del(&mhi_dev->dev);
1065 put_device(&mhi_dev->dev);
1066
1067 ida_free(&mhi_controller_ida, mhi_cntrl->index);
1068 }
1069 EXPORT_SYMBOL_GPL(mhi_unregister_controller);
1070

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests