Hi Jonathan,
On Tue, Apr 29, 2025 at 2:33 PM Jonathan Cameron jic23@kernel.org wrote:
Why move away from the bitmap_subset() call?
I added the following debug patch on top of the original code:
--- a/drivers/iio/industrialio-core.c +++ b/drivers/iio/industrialio-core.c @@ -1947,15 +1947,23 @@ 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[i]); + for (j = i + 1; j < num_masks; j++) { const unsigned long *mask2;
mask2 = av_masks + j * longs_per_mask; + pr_err("******** mask2[%d] is 0x%lx\n", j, mask2[i]); if (bitmap_subset(mask2, mask1, masklength)) dev_warn(indio_dev->dev.parent, "available_scan_mask %d subset of %d. Never used\n",
and saw that the current logic for determining when an element is a subset of a previous one is not working correctly:
[ 1.562321] iio-core: ******** masklength is 9 [ 1.562334] iio-core: ******** longs_per_mask is 1 [ 1.566855] iio-core: ******** mask1[0] is 0x1 [ 1.576121] iio-core: ******** mask2[1] is 0x2 [ 1.580577] iio-core: ******** mask2[2] is 0x4 [ 1.585029] iio-core: ******** mask2[3] is 0x8 [ 1.589482] iio-core: ******** mask2[4] is 0x3 [ 1.593936] iio-core: ******** mask2[5] is 0x7 [ 1.598389] iio-core: ******** mask2[6] is 0xf [ 1.602840] iio-core: ******** mask2[7] is 0xc [ 1.607294] iio-core: ******** mask2[8] is 0x1000 [ 1.612013] max1363 1-0064: available_scan_mask 8 subset of 0. Never used [ 1.618814] iio-core: ******** mask2[9] is 0x2000 [ 1.623530] max1363 1-0064: available_scan_mask 9 subset of 0. Never used [ 1.630328] iio-core: ******** mask2[10] is 0x40000 [ 1.635224] max1363 1-0064: available_scan_mask 10 subset of 0. Never used [ 1.642112] iio-core: ******** mask2[11] is 0x80000 [ 1.647001] max1363 1-0064: available_scan_mask 11 subset of 0. Never used [ 1.653886] iio-core: ******** mask2[12] is 0x3000 [ 1.658687] max1363 1-0064: available_scan_mask 12 subset of 0. Never used [ 1.665571] iio-core: ******** mask2[13] is 0xc0000 [ 1.670461] max1363 1-0064: available_scan_mask 13 subset of 0. Never used [ 1.677350] iio-core: ******** mask1[1] is 0x4 [ 1.681811] iio-core: ******** mask2[2] is 0x8 [ 1.686272] iio-core: ******** mask2[3] is 0x3 [ 1.690724] iio-core: ******** mask2[4] is 0x7 [ 1.695175] iio-core: ******** mask2[5] is 0xf [ 1.699626] iio-core: ******** mask2[6] is 0xc [ 1.704078] iio-core: ******** mask2[7] is 0x1000 [ 1.708791] iio-core: ******** mask2[8] is 0x2000 [ 1.713506] max1363 1-0064: available_scan_mask 8 subset of 1. Never used [ 1.720305] iio-core: ******** mask2[9] is 0x40000 [ 1.725106] max1363 1-0064: available_scan_mask 9 subset of 1. Never used [ 1.731903] iio-core: ******** mask2[10] is 0x80000 [ 1.736793] max1363 1-0064: available_scan_mask 10 subset of 1. Never used [ 1.743676] iio-core: ******** mask2[11] is 0x3000 [ 1.748478] max1363 1-0064: available_scan_mask 11 subset of 1. Never used [ 1.755363] iio-core: ******** mask2[12] is 0xc0000 [ 1.760251] max1363 1-0064: available_scan_mask 12 subset of 1. Never used [ 1.767136] iio-core: ******** mask2[13] is 0x0 [ 1.771677] max1363 1-0064: available_scan_mask 13 subset of 1. Never used [ 1.778562] iio-core: ******** mask1[2] is 0x3 [ 1.783015] iio-core: ******** mask2[3] is 0x7 [ 1.787470] iio-core: ******** mask2[4] is 0xf [ 1.791922] iio-core: ******** mask2[5] is 0xc [ 1.796403] iio-core: ******** mask2[6] is 0x1000 [ 1.801116] iio-core: ******** mask2[7] is 0x2000 [ 1.805830] iio-core: ******** mask2[8] is 0x40000 [ 1.810636] max1363 1-0064: available_scan_mask 8 subset of 2. Never used [ 1.817433] iio-core: ******** mask2[9] is 0x80000 [ 1.822235] max1363 1-0064: available_scan_mask 9 subset of 2. Never used [ 1.829033] iio-core: ******** mask2[10] is 0x3000 [ 1.833832] max1363 1-0064: available_scan_mask 10 subset of 2. Never used [ 1.840719] iio-core: ******** mask2[11] is 0xc0000 [ 1.845607] max1363 1-0064: available_scan_mask 11 subset of 2. Never used [ 1.852491] iio-core: ******** mask2[12] is 0x0 [ 1.857029] max1363 1-0064: available_scan_mask 12 subset of 2. Never used [ 1.863915] iio-core: ******** mask2[13] is 0x0 [ 1.868456] max1363 1-0064: available_scan_mask 13 subset of 2. Never used [ 1.875341] iio-core: ******** mask1[3] is 0xf [ 1.879794] iio-core: ******** mask2[4] is 0xc [ 1.884246] iio-core: ******** mask2[5] is 0x1000 [ 1.888960] iio-core: ******** mask2[6] is 0x2000 [ 1.893674] iio-core: ******** mask2[7] is 0x40000 [ 1.898475] iio-core: ******** mask2[8] is 0x80000 [ 1.903276] max1363 1-0064: available_scan_mask 8 subset of 3. Never used [ 1.910074] iio-core: ******** mask2[9] is 0x3000 [ 1.914788] max1363 1-0064: available_scan_mask 9 subset of 3. Never used [ 1.921586] iio-core: ******** mask2[10] is 0xc0000 [ 1.926474] max1363 1-0064: available_scan_mask 10 subset of 3. Never used [ 1.933360] iio-core: ******** mask2[11] is 0x0 [ 1.937906] max1363 1-0064: available_scan_mask 11 subset of 3. Never used [ 1.944794] iio-core: ******** mask2[12] is 0x0 [ 1.949334] max1363 1-0064: available_scan_mask 12 subset of 3. Never used [ 1.956219] iio-core: ******** mask2[13] is 0xffff0000012b5480 [ 1.962063] max1363 1-0064: available_scan_mask 13 subset of 3. Never used [ 1.968948] iio-core: ******** mask1[4] is 0x1000 [ 1.973659] iio-core: ******** mask2[5] is 0x2000 [ 1.978372] iio-core: ******** mask2[6] is 0x40000 [ 1.983172] iio-core: ******** mask2[7] is 0x80000 [ 1.987972] iio-core: ******** mask2[8] is 0x3000 [ 1.992686] max1363 1-0064: available_scan_mask 8 subset of 4. Never used [ 1.999484] iio-core: ******** mask2[9] is 0xc0000 [ 2.004289] max1363 1-0064: available_scan_mask 9 subset of 4. Never used [ 2.011087] iio-core: ******** mask2[10] is 0x0 [ 2.015629] max1363 1-0064: available_scan_mask 10 subset of 4. Never used [ 2.022514] iio-core: ******** mask2[11] is 0x0 [ 2.027054] max1363 1-0064: available_scan_mask 11 subset of 4. Never used [ 2.033939] iio-core: ******** mask2[12] is 0xffff0000012b5480 [ 2.039783] max1363 1-0064: available_scan_mask 12 subset of 4. Never used [ 2.046668] iio-core: ******** mask2[13] is 0xffff0000012b5420 [ 2.052513] max1363 1-0064: available_scan_mask 13 subset of 4. Never used [ 2.059404] iio-core: ******** mask1[5] is 0x40000 [ 2.064203] iio-core: ******** mask2[6] is 0x80000 [ 2.069003] iio-core: ******** mask2[7] is 0x3000 [ 2.073716] iio-core: ******** mask2[8] is 0xc0000 [ 2.078518] max1363 1-0064: available_scan_mask 8 subset of 5. Never used [ 2.085316] iio-core: ******** mask2[9] is 0x0 [ 2.089769] max1363 1-0064: available_scan_mask 9 subset of 5. Never used [ 2.096567] iio-core: ******** mask2[10] is 0x0 [ 2.101107] max1363 1-0064: available_scan_mask 10 subset of 5. Never used [ 2.107993] iio-core: ******** mask2[11] is 0xffff0000012b5480 [ 2.113836] max1363 1-0064: available_scan_mask 11 subset of 5. Never used [ 2.120721] iio-core: ******** mask2[12] is 0xffff0000012b5420 [ 2.126564] max1363 1-0064: available_scan_mask 12 subset of 5. Never used [ 2.133449] iio-core: ******** mask2[13] is 0xffff0000012b53c0 [ 2.139292] max1363 1-0064: available_scan_mask 13 subset of 5. Never used [ 2.146182] iio-core: ******** mask1[6] is 0x3000 [ 2.150898] iio-core: ******** mask2[7] is 0xc0000 [ 2.155699] max1363 1-0064: available_scan_mask 7 subset of 6. Never used [ 2.162499] iio-core: ******** mask2[8] is 0x0 [ 2.166952] max1363 1-0064: available_scan_mask 8 subset of 6. Never used [ 2.173750] iio-core: ******** mask2[9] is 0x0 [ 2.178204] max1363 1-0064: available_scan_mask 9 subset of 6. Never used [ 2.185006] iio-core: ******** mask2[10] is 0xffff0000012b5480 [ 2.190850] max1363 1-0064: available_scan_mask 10 subset of 6. Never used [ 2.197735] iio-core: ******** mask2[11] is 0xffff0000012b5420 [ 2.203578] max1363 1-0064: available_scan_mask 11 subset of 6. Never used [ 2.210463] iio-core: ******** mask2[12] is 0xffff0000012b53c0 [ 2.216307] max1363 1-0064: available_scan_mask 12 subset of 6. Never used [ 2.223194] iio-core: ******** mask2[13] is 0xffff0000012b5360 [ 2.229041] max1363 1-0064: available_scan_mask 13 subset of 6. Never used [ 2.235926] iio-core: ******** mask1[7] is 0x0 [ 2.240378] iio-core: ******** mask2[8] is 0x0 [ 2.244831] max1363 1-0064: available_scan_mask 8 subset of 7. Never used [ 2.251629] iio-core: ******** mask2[9] is 0xffff0000012b5480 [ 2.257385] max1363 1-0064: available_scan_mask 9 subset of 7. Never used [ 2.264183] iio-core: ******** mask2[10] is 0xffff0000012b5420 [ 2.270032] max1363 1-0064: available_scan_mask 10 subset of 7. Never used [ 2.276914] iio-core: ******** mask2[11] is 0xffff0000012b53c0 [ 2.282757] max1363 1-0064: available_scan_mask 11 subset of 7. Never used [ 2.289640] iio-core: ******** mask2[12] is 0xffff0000012b5360 [ 2.295483] max1363 1-0064: available_scan_mask 12 subset of 7. Never used [ 2.302367] iio-core: ******** mask2[13] is 0xffff0000012b5300 [ 2.308215] max1363 1-0064: available_scan_mask 13 subset of 7. Never used [ 2.315101] iio-core: ******** mask1[8] is 0xffff0000012b5480 [ 2.320857] iio-core: ******** mask2[9] is 0xffff0000012b5420 [ 2.326613] max1363 1-0064: available_scan_mask 9 subset of 8. Never used [ 2.333411] iio-core: ******** mask2[10] is 0xffff0000012b53c0 [ 2.339254] max1363 1-0064: available_scan_mask 10 subset of 8. Never used [ 2.346138] iio-core: ******** mask2[11] is 0xffff0000012b5360 [ 2.351981] max1363 1-0064: available_scan_mask 11 subset of 8. Never used [ 2.358867] iio-core: ******** mask2[12] is 0xffff0000012b5300 [ 2.364710] max1363 1-0064: available_scan_mask 12 subset of 8. Never used [ 2.371594] iio-core: ******** mask2[13] is 0xffff0000012b52a0 [ 2.377437] max1363 1-0064: available_scan_mask 13 subset of 8. Never used [ 2.384322] iio-core: ******** mask1[9] is 0xffff0000012b53c0 [ 2.390077] iio-core: ******** mask2[10] is 0xffff0000012b5360 [ 2.395921] max1363 1-0064: available_scan_mask 10 subset of 9. Never used [ 2.402805] iio-core: ******** mask2[11] is 0xffff0000012b5300 [ 2.408648] max1363 1-0064: available_scan_mask 11 subset of 9. Never used [ 2.415533] iio-core: ******** mask2[12] is 0xffff0000012b52a0 [ 2.421376] max1363 1-0064: available_scan_mask 12 subset of 9. Never used [ 2.428262] iio-core: ******** mask2[13] is 0xffff0000012b5240 [ 2.434108] max1363 1-0064: available_scan_mask 13 subset of 9. Never used [ 2.440993] iio-core: ******** mask1[10] is 0xffff0000012b5300 [ 2.446836] iio-core: ******** mask2[11] is 0xffff0000012b52a0 [ 2.452679] max1363 1-0064: available_scan_mask 11 subset of 10. Never used [ 2.459651] iio-core: ******** mask2[12] is 0xffff0000012b5240 [ 2.465494] max1363 1-0064: available_scan_mask 12 subset of 10. Never used [ 2.472466] iio-core: ******** mask2[13] is 0xffff0000012b51e0 [ 2.478309] max1363 1-0064: available_scan_mask 13 subset of 10. Never used [ 2.485281] iio-core: ******** mask1[11] is 0xffff0000012b5240 [ 2.491123] iio-core: ******** mask2[12] is 0xffff0000012b51e0 [ 2.496966] max1363 1-0064: available_scan_mask 12 subset of 11. Never used [ 2.503939] iio-core: ******** mask2[13] is 0xffff0000012b5180 [ 2.509780] max1363 1-0064: available_scan_mask 13 subset of 11. Never used [ 2.516752] iio-core: ******** mask1[12] is 0xffff0000012b5180 [ 2.522594] iio-core: ******** mask2[13] is 0xffff0000012b5120 [ 2.528436] max1363 1-0064: available_scan_mask 13 subset of 12. Never used
That's why I decided to implement a new one that I have validated on a PC.
I am open to suggestions.
Thanks