Hi Leonardo,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on powerpc/next]
[also build test WARNING on v5.8-rc1 next-20200618]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use  as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/Leonardo-Bras/Remove-default-DMA-window-before-creating-DDW/20200619-131022
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: powerpc-randconfig-r031-20200619 (attached as .config)
compiler: clang version 11.0.0 (https://github.com/llvm/llvm-project 
63700971ac9cdf198faa4a3a7c226fa579e49206)
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 powerpc cross compiling tool for clang build
        # apt-get install binutils-powerpc-linux-gnu
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=powerpc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>

All warnings (new ones prefixed by >>, old ones prefixed by <<):

>> arch/powerpc/platforms/pseries/iommu.c:1111:6: warning: variable 'dfl_win' 
>> is used uninitialized whenever 'if' condition is true 
>> [-Wsometimes-uninitialized]
if (ret)
^~~
arch/powerpc/platforms/pseries/iommu.c:1234:6: note: uninitialized use occurs 
here
if (dfl_win)
^~~~~~~
arch/powerpc/platforms/pseries/iommu.c:1111:2: note: remove the 'if' if its 
condition is always false
if (ret)
^~~~~~~~
arch/powerpc/platforms/pseries/iommu.c:1079:34: note: initialize the variable 
'dfl_win' to silence this warning
struct property *win64, *dfl_win;
^
= NULL
1 warning generated.

vim +1111 arch/powerpc/platforms/pseries/iommu.c

715a454e17d328 Leonardo Bras        2020-06-19  1056  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1057  /*
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1058   * If the PE supports 
dynamic dma windows, and there is space for a table
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1059   * that can map all pages 
in a linear offset, then setup such a table,
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1060   * and record the 
dma-offset in the struct device.
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1061   *
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1062   * dev: the pci device we 
are checking
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1063   * pdn: the parent pe 
node with the ibm,dma_window property
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1064   * Future: also check if 
we can remap the base window for our base page size
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1065   *
9ae2fddeda4cbf Christoph Hellwig    2019-02-13  1066   * returns the dma offset 
for use by the direct mapped DMA code.
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1067   */
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1068  static u64 
enable_ddw(struct pci_dev *dev, struct device_node *pdn)
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1069  {
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1070    int len, ret;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1071    struct 
ddw_query_response query;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1072    struct 
ddw_create_response create;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1073    int page_shift;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1074    u64 dma_addr, max_addr;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1075    struct device_node *dn;
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1076    u32 ddw_avail[3];
3248d5f65aac44 Leonardo Bras        2020-06-19  1077  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1078    struct direct_window 
*window;
3248d5f65aac44 Leonardo Bras        2020-06-19  1079    struct property *win64, 
*dfl_win;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1080    struct 
dynamic_dma_window_prop *ddwprop;
61435690a9c781 Nishanth Aravamudan  2013-03-07  1081    struct failed_ddw_pdn 
*fpdn;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1082  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1083    
mutex_lock(&direct_window_init_mutex);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1084  
b73a635f348610 Milton Miller        2011-05-11  1085    dma_addr = 
find_existing_ddw(pdn);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1086    if (dma_addr != 0)
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1087            goto out_unlock;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1088  
61435690a9c781 Nishanth Aravamudan  2013-03-07  1089    /*
61435690a9c781 Nishanth Aravamudan  2013-03-07  1090     * If we already went 
through this for a previous function of
61435690a9c781 Nishanth Aravamudan  2013-03-07  1091     * the same device and 
failed, we don't want to muck with the
61435690a9c781 Nishanth Aravamudan  2013-03-07  1092     * DMA window again, as 
it will race with in-flight operations
61435690a9c781 Nishanth Aravamudan  2013-03-07  1093     * and can lead to 
EEHs. The above mutex protects access to the
61435690a9c781 Nishanth Aravamudan  2013-03-07  1094     * list.
61435690a9c781 Nishanth Aravamudan  2013-03-07  1095     */
61435690a9c781 Nishanth Aravamudan  2013-03-07  1096    
list_for_each_entry(fpdn, &failed_ddw_pdn_list, list) {
b7c670d673d118 Rob Herring          2017-08-21  1097            if (fpdn->pdn 
== pdn)
61435690a9c781 Nishanth Aravamudan  2013-03-07  1098                    goto 
out_unlock;
61435690a9c781 Nishanth Aravamudan  2013-03-07  1099    }
61435690a9c781 Nishanth Aravamudan  2013-03-07  1100  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1101    /*
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1102     * the 
ibm,ddw-applicable property holds the tokens for:
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1103     * 
ibm,query-pe-dma-window
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1104     * 
ibm,create-pe-dma-window
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1105     * 
ibm,remove-pe-dma-window
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1106     * for the given node 
in that order.
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1107     * the property is 
actually in the parent, not the PE
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1108     */
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1109    ret = 
of_property_read_u32_array(pdn, "ibm,ddw-applicable",
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1110                            
         &ddw_avail[0], 3);
9410e0185e6539 Alexey Kardashevskiy 2014-09-25 @1111    if (ret)
ae69e1eddc646f Nishanth Aravamudan  2014-01-10  1112            goto out_failed;
25ebc45b93452d Nishanth Aravamudan  2012-05-15  1113  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1114    /*
3248d5f65aac44 Leonardo Bras        2020-06-19  1115     * First step of 
setting up DDW is removing the default DMA window,
3248d5f65aac44 Leonardo Bras        2020-06-19  1116     * if it's present. It 
will make all the resources available to the
3248d5f65aac44 Leonardo Bras        2020-06-19  1117     * new DDW window.
3248d5f65aac44 Leonardo Bras        2020-06-19  1118     * If anything fails 
after this, we need to restore it.
3248d5f65aac44 Leonardo Bras        2020-06-19  1119     */
3248d5f65aac44 Leonardo Bras        2020-06-19  1120  
3248d5f65aac44 Leonardo Bras        2020-06-19  1121    dfl_win = 
of_find_property(pdn, "ibm,dma-window", NULL);
3248d5f65aac44 Leonardo Bras        2020-06-19  1122    if (dfl_win)
3248d5f65aac44 Leonardo Bras        2020-06-19  1123            
remove_dma_window(pdn, ddw_avail, dfl_win);
3248d5f65aac44 Leonardo Bras        2020-06-19  1124  
3248d5f65aac44 Leonardo Bras        2020-06-19  1125    /*
3248d5f65aac44 Leonardo Bras        2020-06-19  1126     * Query if there is a 
window of size to map the
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1127     * whole partition.  
Query returns number of windows, largest
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1128     * block assigned to PE 
(partition endpoint), and two bitmasks
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1129     * of page sizes: 
supported and supported for migrate-dma.
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1130     */
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1131    dn = 
pci_device_to_OF_node(dev);
0ef1ee0bda323e Leonardo Bras        2020-06-19  1132    ret = query_ddw(dev, 
ddw_avail, &query, pdn);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1133    if (ret != 0)
ae69e1eddc646f Nishanth Aravamudan  2014-01-10  1134            goto out_failed;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1135  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1136    if 
(query.windows_available == 0) {
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1137            /*
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1138             * no 
additional windows are available for this device.
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1139             * We might be 
able to reallocate the existing window,
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1140             * trading in 
for a larger page size.
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1141             */
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1142            
dev_dbg(&dev->dev, "no free dynamic windows");
ae69e1eddc646f Nishanth Aravamudan  2014-01-10  1143            goto out_failed;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1144    }
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1145    if (query.page_size & 
4) {
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1146            page_shift = 
24; /* 16MB */
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1147    } else if 
(query.page_size & 2) {
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1148            page_shift = 
16; /* 64kB */
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1149    } else if 
(query.page_size & 1) {
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1150            page_shift = 
12; /* 4kB */
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1151    } else {
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1152            
dev_dbg(&dev->dev, "no supported direct page size in mask %x",
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1153                      
query.page_size);
ae69e1eddc646f Nishanth Aravamudan  2014-01-10  1154            goto out_failed;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1155    }
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1156    /* verify the window * 
number of ptes will map the partition */
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1157    /* check largest block 
* page size > max memory hotplug addr */
68c0449ea16d77 Alexey Kardashevskiy 2018-12-19  1158    max_addr = 
ddw_memory_hotplug_max();
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1159    if 
(query.largest_available_block < (max_addr >> page_shift)) {
0ef1ee0bda323e Leonardo Bras        2020-06-19  1160            
dev_dbg(&dev->dev, "can't map partition max 0x%llx with %llu "
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1161                      
"%llu-sized pages\n", max_addr,  query.largest_available_block,
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1162                      1ULL 
<< page_shift);
ae69e1eddc646f Nishanth Aravamudan  2014-01-10  1163            goto out_failed;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1164    }
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1165    len = 
order_base_2(max_addr);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1166    win64 = 
kzalloc(sizeof(struct property), GFP_KERNEL);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1167    if (!win64) {
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1168            
dev_info(&dev->dev,
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1169                    
"couldn't allocate property for 64bit dma window\n");
ae69e1eddc646f Nishanth Aravamudan  2014-01-10  1170            goto out_failed;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1171    }
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1172    win64->name = 
kstrdup(DIRECT64_PROPNAME, GFP_KERNEL);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1173    win64->value = ddwprop 
= kmalloc(sizeof(*ddwprop), GFP_KERNEL);
767303349e052a Nishanth Aravamudan  2011-05-06  1174    win64->length = 
sizeof(*ddwprop);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1175    if (!win64->name || 
!win64->value) {
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1176            
dev_info(&dev->dev,
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1177                    
"couldn't allocate property name and value\n");
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1178            goto 
out_free_prop;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1179    }
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1180  
b73a635f348610 Milton Miller        2011-05-11  1181    ret = create_ddw(dev, 
ddw_avail, &create, page_shift, len);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1182    if (ret != 0)
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1183            goto 
out_free_prop;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1184  
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1185    ddwprop->liobn = 
cpu_to_be32(create.liobn);
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1186    ddwprop->dma_base = 
cpu_to_be64(((u64)create.addr_hi << 32) |
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1187                    
create.addr_lo);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1188    ddwprop->tce_shift = 
cpu_to_be32(page_shift);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1189    ddwprop->window_shift = 
cpu_to_be32(len);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1190  
b7c670d673d118 Rob Herring          2017-08-21  1191    dev_dbg(&dev->dev, 
"created tce table LIOBN 0x%x for %pOF\n",
b7c670d673d118 Rob Herring          2017-08-21  1192              create.liobn, 
dn);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1193  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1194    window = 
kzalloc(sizeof(*window), GFP_KERNEL);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1195    if (!window)
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1196            goto 
out_clear_window;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1197  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1198    ret = 
walk_system_ram_range(0, memblock_end_of_DRAM() >> PAGE_SHIFT,
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1199                    
win64->value, tce_setrange_multi_pSeriesLP_walk);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1200    if (ret) {
b7c670d673d118 Rob Herring          2017-08-21  1201            
dev_info(&dev->dev, "failed to map direct window for %pOF: %d\n",
b7c670d673d118 Rob Herring          2017-08-21  1202                     dn, 
ret);
7a19081fc26581 Julia Lawall         2011-08-08  1203            goto 
out_free_window;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1204    }
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1205  
79d1c712958f94 Nathan Fontenot      2012-10-02  1206    ret = 
of_add_property(pdn, win64);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1207    if (ret) {
b7c670d673d118 Rob Herring          2017-08-21  1208            
dev_err(&dev->dev, "unable to add dma window property for %pOF: %d",
b7c670d673d118 Rob Herring          2017-08-21  1209                     pdn, 
ret);
7a19081fc26581 Julia Lawall         2011-08-08  1210            goto 
out_free_window;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1211    }
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1212  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1213    window->device = pdn;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1214    window->prop = ddwprop;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1215    
spin_lock(&direct_window_list_lock);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1216    list_add(&window->list, 
&direct_window_list);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1217    
spin_unlock(&direct_window_list_lock);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1218  
9410e0185e6539 Alexey Kardashevskiy 2014-09-25  1219    dma_addr = 
be64_to_cpu(ddwprop->dma_base);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1220    goto out_unlock;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1221  
7a19081fc26581 Julia Lawall         2011-08-08  1222  out_free_window:
7a19081fc26581 Julia Lawall         2011-08-08  1223    kfree(window);
7a19081fc26581 Julia Lawall         2011-08-08  1224  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1225  out_clear_window:
5efbabe09d986f Gavin Shan           2014-08-11  1226    remove_ddw(pdn, true);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1227  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1228  out_free_prop:
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1229    kfree(win64->name);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1230    kfree(win64->value);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1231    kfree(win64);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1232  
ae69e1eddc646f Nishanth Aravamudan  2014-01-10  1233  out_failed:
3248d5f65aac44 Leonardo Bras        2020-06-19  1234    if (dfl_win)
3248d5f65aac44 Leonardo Bras        2020-06-19  1235            
reset_dma_window(dev, pdn);
25ebc45b93452d Nishanth Aravamudan  2012-05-15  1236  
61435690a9c781 Nishanth Aravamudan  2013-03-07  1237    fpdn = 
kzalloc(sizeof(*fpdn), GFP_KERNEL);
61435690a9c781 Nishanth Aravamudan  2013-03-07  1238    if (!fpdn)
61435690a9c781 Nishanth Aravamudan  2013-03-07  1239            goto out_unlock;
61435690a9c781 Nishanth Aravamudan  2013-03-07  1240    fpdn->pdn = pdn;
61435690a9c781 Nishanth Aravamudan  2013-03-07  1241    list_add(&fpdn->list, 
&failed_ddw_pdn_list);
61435690a9c781 Nishanth Aravamudan  2013-03-07  1242  
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1243  out_unlock:
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1244    
mutex_unlock(&direct_window_init_mutex);
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1245    return dma_addr;
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1246  }
4e8b0cf46b2570 Nishanth Aravamudan  2011-02-10  1247  

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to