iio: buffer: document known issue
Add documentation explaining why the code which scans all available scan masks is checking only a single long worth of bits even though the code was intended to be supporting masks wider than single long. Signed-off-by: Matti Vaittinen <mazziesaccount@gmail.com> Link: https://lore.kernel.org/r/ef61c2c1e9a1c5e9f713f656871fdcb1652afdc2.1697452986.git.mazziesaccount@gmail.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
2718f15403
commit
6543f376ec
@ -413,6 +413,22 @@ static const unsigned long *iio_scan_mask_match(const unsigned long *av_masks,
|
||||
{
|
||||
if (bitmap_empty(mask, masklength))
|
||||
return NULL;
|
||||
/*
|
||||
* The condition here do not handle multi-long masks correctly.
|
||||
* It only checks the first long to be zero, and will use such mask
|
||||
* as a terminator even if there was bits set after the first long.
|
||||
*
|
||||
* Correct check would require using:
|
||||
* while (!bitmap_empty(av_masks, masklength))
|
||||
* instead. This is potentially hazardous because the
|
||||
* avaliable_scan_masks is a zero terminated array of longs - and
|
||||
* using the proper bitmap_empty() check for multi-long wide masks
|
||||
* would require the array to be terminated with multiple zero longs -
|
||||
* which is not such an usual pattern.
|
||||
*
|
||||
* As writing of this no multi-long wide masks were found in-tree, so
|
||||
* the simple while (*av_masks) check is working.
|
||||
*/
|
||||
while (*av_masks) {
|
||||
if (strict) {
|
||||
if (bitmap_equal(mask, av_masks, masklength))
|
||||
|
Loading…
Reference in New Issue
Block a user