On Wed, Apr 30, 2025 at 10:11 AM Jonathan Cameron Jonathan.Cameron@huawei.com wrote:
As below. Should be mask1[0] as we've already indexed the array with the above calculation.
Thanks for catching that bug.
Now I get:
[ 1.556734] iio-core: ******** masklength is 9 [ 1.559663] iio-core: ******** longs_per_mask is 1 [ 1.564119] iio-core: ******** mask1[0] is 0x1 [ 1.573367] iio-core: ******** mask2[0] is 0x2 [ 1.577822] iio-core: ******** mask2[0] is 0x4 [ 1.582279] iio-core: ******** mask2[0] is 0x8 [ 1.586738] iio-core: ******** mask2[0] is 0x3 [ 1.591198] iio-core: ******** mask2[0] is 0x7 [ 1.595654] iio-core: ******** mask2[0] is 0xf [ 1.600110] iio-core: ******** mask2[0] is 0xc [ 1.604560] iio-core: ******** mask2[0] is 0x1000 [ 1.609278] max1363 1-0064: available_scan_mask 8 subset of 0. Never used [ 1.616084] iio-core: ******** mask2[0] is 0x2000 [ 1.620799] max1363 1-0064: available_scan_mask 9 subset of 0. Never used [ 1.627602] iio-core: ******** mask2[0] is 0x40000 [ 1.632408] max1363 1-0064: available_scan_mask 10 subset of 0. Never used [ 1.639303] iio-core: ******** mask2[0] is 0x80000 [ 1.644105] max1363 1-0064: available_scan_mask 11 subset of 0. Never used [ 1.650995] iio-core: ******** mask2[0] is 0x3000 [ 1.655713] max1363 1-0064: available_scan_mask 12 subset of 0. Never used [ 1.662606] iio-core: ******** mask2[0] is 0xc0000 [ 1.667412] max1363 1-0064: available_scan_mask 13 subset of 0. Never used [ 1.674309] iio-core: ******** mask1[1] is 0x2 [ 1.678761] iio-core: ******** mask2[1] is 0x4 [ 1.683212] iio-core: ******** mask2[1] is 0x8 [ 1.687666] iio-core: ******** mask2[1] is 0x3 [ 1.692118] iio-core: ******** mask2[1] is 0x7 [ 1.696576] iio-core: ******** mask2[1] is 0xf [ 1.701029] iio-core: ******** mask2[1] is 0xc [ 1.705483] iio-core: ******** mask2[1] is 0x1000 [ 1.710199] max1363 1-0064: available_scan_mask 8 subset of 1. Never used [ 1.716996] iio-core: ******** mask2[1] is 0x2000 [ 1.721711] max1363 1-0064: available_scan_mask 9 subset of 1. Never used [ 1.728510] iio-core: ******** mask2[1] is 0x40000 [ 1.733317] max1363 1-0064: available_scan_mask 10 subset of 1. Never used [ 1.740212] iio-core: ******** mask2[1] is 0x80000 [ 1.745013] max1363 1-0064: available_scan_mask 11 subset of 1. Never used [ 1.751899] iio-core: ******** mask2[1] is 0x3000 [ 1.756612] max1363 1-0064: available_scan_mask 12 subset of 1. Never used [ 1.763503] iio-core: ******** mask2[1] is 0xc0000 [ 1.768306] max1363 1-0064: available_scan_mask 13 subset of 1. Never used [ 1.775193] iio-core: ******** mask1[2] is 0x4 [ 1.779650] iio-core: ******** mask2[2] is 0x8 [ 1.784117] iio-core: ******** mask2[2] is 0x3 [ 1.788570] iio-core: ******** mask2[2] is 0x7 [ 1.793023] iio-core: ******** mask2[2] is 0xf [ 1.797476] iio-core: ******** mask2[2] is 0xc [ 1.801934] iio-core: ******** mask2[2] is 0x1000 [ 1.806650] max1363 1-0064: available_scan_mask 8 subset of 2. Never used [ 1.813447] iio-core: ******** mask2[2] is 0x2000 [ 1.818162] max1363 1-0064: available_scan_mask 9 subset of 2. Never used [ 1.824961] iio-core: ******** mask2[2] is 0x40000 [ 1.829764] max1363 1-0064: available_scan_mask 10 subset of 2. Never used [ 1.836649] iio-core: ******** mask2[2] is 0x80000 [ 1.841450] max1363 1-0064: available_scan_mask 11 subset of 2. Never used [ 1.848336] iio-core: ******** mask2[2] is 0x3000 [ 1.853049] max1363 1-0064: available_scan_mask 12 subset of 2. Never used [ 1.859934] iio-core: ******** mask2[2] is 0xc0000 [ 1.864740] max1363 1-0064: available_scan_mask 13 subset of 2. Never used [ 1.871626] iio-core: ******** mask1[3] is 0x8 [ 1.876079] iio-core: ******** mask2[3] is 0x3 [ 1.880533] iio-core: ******** mask2[3] is 0x7 [ 1.884985] iio-core: ******** mask2[3] is 0xf [ 1.889439] iio-core: ******** mask2[3] is 0xc [ 1.893891] iio-core: ******** mask2[3] is 0x1000 [ 1.898605] max1363 1-0064: available_scan_mask 8 subset of 3. Never used [ 1.905403] iio-core: ******** mask2[3] is 0x2000 [ 1.910122] max1363 1-0064: available_scan_mask 9 subset of 3. Never used [ 1.916921] iio-core: ******** mask2[3] is 0x40000 [ 1.921724] max1363 1-0064: available_scan_mask 10 subset of 3. Never used [ 1.928610] iio-core: ******** mask2[3] is 0x80000 [ 1.933413] max1363 1-0064: available_scan_mask 11 subset of 3. Never used [ 1.940297] iio-core: ******** mask2[3] is 0x3000 [ 1.945012] max1363 1-0064: available_scan_mask 12 subset of 3. Never used [ 1.951897] iio-core: ******** mask2[3] is 0xc0000 [ 1.956698] max1363 1-0064: available_scan_mask 13 subset of 3. Never used [ 1.963584] iio-core: ******** mask1[4] is 0x3 [ 1.968037] iio-core: ******** mask2[4] is 0x7 [ 1.972489] iio-core: ******** mask2[4] is 0xf [ 1.976942] iio-core: ******** mask2[4] is 0xc [ 1.981394] iio-core: ******** mask2[4] is 0x1000 [ 1.986113] max1363 1-0064: available_scan_mask 8 subset of 4. Never used [ 1.992915] iio-core: ******** mask2[4] is 0x2000 [ 1.997626] max1363 1-0064: available_scan_mask 9 subset of 4. Never used [ 2.004429] iio-core: ******** mask2[4] is 0x40000 [ 2.009230] max1363 1-0064: available_scan_mask 10 subset of 4. Never used [ 2.016120] iio-core: ******** mask2[4] is 0x80000 [ 2.020922] max1363 1-0064: available_scan_mask 11 subset of 4. Never used [ 2.027807] iio-core: ******** mask2[4] is 0x3000 [ 2.032522] max1363 1-0064: available_scan_mask 12 subset of 4. Never used [ 2.039408] iio-core: ******** mask2[4] is 0xc0000 [ 2.044210] max1363 1-0064: available_scan_mask 13 subset of 4. Never used [ 2.051095] iio-core: ******** mask1[5] is 0x7 [ 2.055548] iio-core: ******** mask2[5] is 0xf [ 2.060000] iio-core: ******** mask2[5] is 0xc [ 2.064453] iio-core: ******** mask2[5] is 0x1000 [ 2.069167] max1363 1-0064: available_scan_mask 8 subset of 5. Never used [ 2.075966] iio-core: ******** mask2[5] is 0x2000 [ 2.080680] max1363 1-0064: available_scan_mask 9 subset of 5. Never used [ 2.087478] iio-core: ******** mask2[5] is 0x40000 [ 2.092280] max1363 1-0064: available_scan_mask 10 subset of 5. Never used [ 2.099166] iio-core: ******** mask2[5] is 0x80000 [ 2.103967] max1363 1-0064: available_scan_mask 11 subset of 5. Never used [ 2.110858] iio-core: ******** mask2[5] is 0x3000 [ 2.115573] max1363 1-0064: available_scan_mask 12 subset of 5. Never used [ 2.122463] iio-core: ******** mask2[5] is 0xc0000 [ 2.127265] max1363 1-0064: available_scan_mask 13 subset of 5. Never used [ 2.134150] iio-core: ******** mask1[6] is 0xf [ 2.138602] iio-core: ******** mask2[6] is 0xc [ 2.143056] max1363 1-0064: available_scan_mask 7 subset of 6. Never used [ 2.149862] iio-core: ******** mask2[6] is 0x1000 [ 2.154578] max1363 1-0064: available_scan_mask 8 subset of 6. Never used [ 2.161374] iio-core: ******** mask2[6] is 0x2000 [ 2.166089] max1363 1-0064: available_scan_mask 9 subset of 6. Never used [ 2.172886] iio-core: ******** mask2[6] is 0x40000 [ 2.177687] max1363 1-0064: available_scan_mask 10 subset of 6. Never used [ 2.184573] iio-core: ******** mask2[6] is 0x80000 [ 2.189372] max1363 1-0064: available_scan_mask 11 subset of 6. Never used [ 2.196257] iio-core: ******** mask2[6] is 0x3000 [ 2.200973] max1363 1-0064: available_scan_mask 12 subset of 6. Never used [ 2.207858] iio-core: ******** mask2[6] is 0xc0000 [ 2.212659] max1363 1-0064: available_scan_mask 13 subset of 6. Never used [ 2.219544] iio-core: ******** mask1[7] is 0xc [ 2.223996] iio-core: ******** mask2[7] is 0x1000 [ 2.228715] max1363 1-0064: available_scan_mask 8 subset of 7. Never used [ 2.235518] iio-core: ******** mask2[7] is 0x2000 [ 2.240234] max1363 1-0064: available_scan_mask 9 subset of 7. Never used [ 2.247030] iio-core: ******** mask2[7] is 0x40000 [ 2.251832] max1363 1-0064: available_scan_mask 10 subset of 7. Never used [ 2.258717] iio-core: ******** mask2[7] is 0x80000 [ 2.263518] max1363 1-0064: available_scan_mask 11 subset of 7. Never used [ 2.270403] iio-core: ******** mask2[7] is 0x3000 [ 2.275117] max1363 1-0064: available_scan_mask 12 subset of 7. Never used [ 2.282002] iio-core: ******** mask2[7] is 0xc0000 [ 2.286803] max1363 1-0064: available_scan_mask 13 subset of 7. Never used [ 2.293688] iio-core: ******** mask1[8] is 0x1000 [ 2.298401] iio-core: ******** mask2[8] is 0x2000 [ 2.303116] max1363 1-0064: available_scan_mask 9 subset of 8. Never used [ 2.309914] iio-core: ******** mask2[8] is 0x40000 [ 2.314715] max1363 1-0064: available_scan_mask 10 subset of 8. Never used [ 2.321600] iio-core: ******** mask2[8] is 0x80000 [ 2.326401] max1363 1-0064: available_scan_mask 11 subset of 8. Never used [ 2.333289] iio-core: ******** mask2[8] is 0x3000 [ 2.338004] max1363 1-0064: available_scan_mask 12 subset of 8. Never used [ 2.344889] iio-core: ******** mask2[8] is 0xc0000 [ 2.349691] max1363 1-0064: available_scan_mask 13 subset of 8. Never used [ 2.356577] iio-core: ******** mask1[9] is 0x2000 [ 2.361294] iio-core: ******** mask2[9] is 0x40000 [ 2.366094] max1363 1-0064: available_scan_mask 10 subset of 9. Never used [ 2.372977] iio-core: ******** mask2[9] is 0x80000 [ 2.377778] max1363 1-0064: available_scan_mask 11 subset of 9. Never used [ 2.384663] iio-core: ******** mask2[9] is 0x3000 [ 2.389377] max1363 1-0064: available_scan_mask 12 subset of 9. Never used [ 2.396262] iio-core: ******** mask2[9] is 0xc0000 [ 2.401063] max1363 1-0064: available_scan_mask 13 subset of 9. Never used [ 2.407948] iio-core: ******** mask1[10] is 0x40000 [ 2.412835] iio-core: ******** mask2[10] is 0x80000 [ 2.417723] max1363 1-0064: available_scan_mask 11 subset of 10. Never used [ 2.424696] iio-core: ******** mask2[10] is 0x3000 [ 2.429497] max1363 1-0064: available_scan_mask 12 subset of 10. Never used [ 2.436471] iio-core: ******** mask2[10] is 0xc0000 [ 2.441359] max1363 1-0064: available_scan_mask 13 subset of 10. Never used [ 2.448331] iio-core: ******** mask1[11] is 0x80000 [ 2.453218] iio-core: ******** mask2[11] is 0x3000 [ 2.458020] max1363 1-0064: available_scan_mask 12 subset of 11. Never used [ 2.464991] iio-core: ******** mask2[11] is 0xc0000 [ 2.469879] max1363 1-0064: available_scan_mask 13 subset of 11. Never used [ 2.476860] iio-core: ******** mask1[12] is 0x3000 [ 2.481659] iio-core: ******** mask2[12] is 0xc0000 [ 2.486551] max1363 1-0064: available_scan_mask 13 subset of 12. Never used
Who sets masklength = 9? Is this correct?
If I use BITS_PER_LONG instead of masklength inside bitmap_subset():
--- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -1947,16 +1947,22 @@ static void iio_sanity_check_avail_scan_masks(struct iio_dev *indio_dev) * available masks in the order of preference (presumably the least * costy to access masks first). */ + pr_err("******** masklength is %d", masklength); + pr_err("******** longs_per_mask is %d", longs_per_mask); + + for (i = 0; i < num_masks - 1; i++) { const unsigned long *mask1; int j;
mask1 = av_masks + i * longs_per_mask; + pr_err("******** mask1[%d] is 0x%lx\n", i, mask1[0]); for (j = i + 1; j < num_masks; j++) { const unsigned long *mask2;
mask2 = av_masks + j * longs_per_mask; - if (bitmap_subset(mask2, mask1, masklength)) + pr_err("******** mask2[%d] is 0x%lx\n", i, mask2[0]); + if (bitmap_subset(mask2, mask1, BITS_PER_LONG)) dev_warn(indio_dev->dev.parent, "available_scan_mask %d subset of %d. Never used\n", j, i);
Then the correct subset information is printed:
[ 1.560392] iio-core: ******** masklength is 9 [ 1.560406] iio-core: ******** longs_per_mask is 1 [ 1.564890] iio-core: ******** mask1[0] is 0x1 [ 1.574185] iio-core: ******** mask2[0] is 0x2 [ 1.578644] iio-core: ******** mask2[0] is 0x4 [ 1.583108] iio-core: ******** mask2[0] is 0x8 [ 1.587564] iio-core: ******** mask2[0] is 0x3 [ 1.592024] iio-core: ******** mask2[0] is 0x7 [ 1.596486] iio-core: ******** mask2[0] is 0xf [ 1.600948] iio-core: ******** mask2[0] is 0xc [ 1.605407] iio-core: ******** mask2[0] is 0x1000 [ 1.610130] iio-core: ******** mask2[0] is 0x2000 [ 1.614856] iio-core: ******** mask2[0] is 0x40000 [ 1.619670] iio-core: ******** mask2[0] is 0x80000 [ 1.624475] iio-core: ******** mask2[0] is 0x3000 [ 1.629199] iio-core: ******** mask2[0] is 0xc0000 [ 1.634017] iio-core: ******** mask1[1] is 0x2 [ 1.638475] iio-core: ******** mask2[1] is 0x4 [ 1.642941] iio-core: ******** mask2[1] is 0x8 [ 1.647401] iio-core: ******** mask2[1] is 0x3 [ 1.651865] iio-core: ******** mask2[1] is 0x7 [ 1.656321] iio-core: ******** mask2[1] is 0xf [ 1.660786] iio-core: ******** mask2[1] is 0xc [ 1.665245] iio-core: ******** mask2[1] is 0x1000 [ 1.669968] iio-core: ******** mask2[1] is 0x2000 [ 1.674691] iio-core: ******** mask2[1] is 0x40000 [ 1.679505] iio-core: ******** mask2[1] is 0x80000 [ 1.684345] iio-core: ******** mask2[1] is 0x3000 [ 1.689069] iio-core: ******** mask2[1] is 0xc0000 [ 1.693872] iio-core: ******** mask1[2] is 0x4 [ 1.698331] iio-core: ******** mask2[2] is 0x8 [ 1.702788] iio-core: ******** mask2[2] is 0x3 [ 1.707246] iio-core: ******** mask2[2] is 0x7 [ 1.711702] iio-core: ******** mask2[2] is 0xf [ 1.716156] iio-core: ******** mask2[2] is 0xc [ 1.720614] iio-core: ******** mask2[2] is 0x1000 [ 1.725333] iio-core: ******** mask2[2] is 0x2000 [ 1.730046] iio-core: ******** mask2[2] is 0x40000 [ 1.734850] iio-core: ******** mask2[2] is 0x80000 [ 1.739665] iio-core: ******** mask2[2] is 0x3000 [ 1.744385] iio-core: ******** mask2[2] is 0xc0000 [ 1.749192] iio-core: ******** mask1[3] is 0x8 [ 1.753654] iio-core: ******** mask2[3] is 0x3 [ 1.758112] iio-core: ******** mask2[3] is 0x7 [ 1.762570] iio-core: ******** mask2[3] is 0xf [ 1.767027] iio-core: ******** mask2[3] is 0xc [ 1.771484] iio-core: ******** mask2[3] is 0x1000 [ 1.776203] iio-core: ******** mask2[3] is 0x2000 [ 1.780921] iio-core: ******** mask2[3] is 0x40000 [ 1.785727] iio-core: ******** mask2[3] is 0x80000 [ 1.790531] iio-core: ******** mask2[3] is 0x3000 [ 1.795253] iio-core: ******** mask2[3] is 0xc0000 [ 1.800059] iio-core: ******** mask1[4] is 0x3 [ 1.804515] iio-core: ******** mask2[4] is 0x7 [ 1.808970] iio-core: ******** mask2[4] is 0xf [ 1.813427] iio-core: ******** mask2[4] is 0xc [ 1.817891] iio-core: ******** mask2[4] is 0x1000 [ 1.822608] iio-core: ******** mask2[4] is 0x2000 [ 1.827336] iio-core: ******** mask2[4] is 0x40000 [ 1.832164] iio-core: ******** mask2[4] is 0x80000 [ 1.836970] iio-core: ******** mask2[4] is 0x3000 [ 1.841690] iio-core: ******** mask2[4] is 0xc0000 [ 1.846495] iio-core: ******** mask1[5] is 0x7 [ 1.850953] iio-core: ******** mask2[5] is 0xf [ 1.855409] iio-core: ******** mask2[5] is 0xc [ 1.859867] iio-core: ******** mask2[5] is 0x1000 [ 1.864590] iio-core: ******** mask2[5] is 0x2000 [ 1.869310] iio-core: ******** mask2[5] is 0x40000 [ 1.874116] iio-core: ******** mask2[5] is 0x80000 [ 1.878918] iio-core: ******** mask2[5] is 0x3000 [ 1.883636] iio-core: ******** mask2[5] is 0xc0000 [ 1.888442] iio-core: ******** mask1[6] is 0xf [ 1.892900] iio-core: ******** mask2[6] is 0xc [ 1.897364] max1363 1-0064: available_scan_mask 7 subset of 6. Never used [ 1.904169] iio-core: ******** mask2[6] is 0x1000 [ 1.908887] iio-core: ******** mask2[6] is 0x2000 [ 1.913603] iio-core: ******** mask2[6] is 0x40000 [ 1.918409] iio-core: ******** mask2[6] is 0x80000 [ 1.923212] iio-core: ******** mask2[6] is 0x3000 [ 1.927930] iio-core: ******** mask2[6] is 0xc0000 [ 1.932733] iio-core: ******** mask1[7] is 0xc [ 1.937190] iio-core: ******** mask2[7] is 0x1000 [ 1.941902] iio-core: ******** mask2[7] is 0x2000 [ 1.941907] iio-core: ******** mask2[7] is 0x40000 [ 1.941911] iio-core: ******** mask2[7] is 0x80000 [ 1.941917] iio-core: ******** mask2[7] is 0x3000 [ 1.965640] iio-core: ******** mask2[7] is 0xc0000 [ 1.970447] iio-core: ******** mask1[8] is 0x1000 [ 1.975163] iio-core: ******** mask2[8] is 0x2000 [ 1.979881] iio-core: ******** mask2[8] is 0x40000 [ 1.984683] iio-core: ******** mask2[8] is 0x80000 [ 1.989491] iio-core: ******** mask2[8] is 0x3000 [ 1.994209] iio-core: ******** mask2[8] is 0xc0000 [ 1.999010] iio-core: ******** mask1[9] is 0x2000 [ 2.003732] iio-core: ******** mask2[9] is 0x40000 [ 2.008533] iio-core: ******** mask2[9] is 0x80000 [ 2.013339] iio-core: ******** mask2[9] is 0x3000 [ 2.018065] iio-core: ******** mask2[9] is 0xc0000 [ 2.022866] iio-core: ******** mask1[10] is 0x40000 [ 2.027760] iio-core: ******** mask2[10] is 0x80000 [ 2.032647] iio-core: ******** mask2[10] is 0x3000 [ 2.037453] iio-core: ******** mask2[10] is 0xc0000 [ 2.042346] iio-core: ******** mask1[11] is 0x80000 [ 2.047234] iio-core: ******** mask2[11] is 0x3000 [ 2.052041] iio-core: ******** mask2[11] is 0xc0000 [ 2.056928] iio-core: ******** mask1[12] is 0x3000 [ 2.061736] iio-core: ******** mask2[12] is 0xc0000