On 17/06/2025 12:07 pm, Alejandro Vallejo wrote:
> diff --git a/xen/include/xen/device_tree.h b/xen/include/xen/device_tree.h
> index 75017e4266..2daef8659e 100644
> --- a/xen/include/xen/device_tree.h
> +++ b/xen/include/xen/device_tree.h
> @@ -261,10 +261,19 @@ void intc_dt_preinit(void);
> /* Helper to read a big number; size is in cells (not bytes) */
> static inline u64 dt_read_number(const __be32 *cell, int size)
> {
> - u64 r = 0;
> + u64 r = be32_to_cpu(*cell);
> +
> + switch ( size )
> + {
> + case 1:
> + break;
> + case 2:
> + r = (r << 32) | be32_to_cpu(cell[1]);
> + default:
> + // Nonsensical size. default to 1.
> + printk(XENLOG_WARNING "dt_read_number(%d) bad size", size);
> + };
>
> - while ( size-- )
> - r = (r << 32) | be32_to_cpu(*(cell++));
> return r;
> }
What testing has this had?
~Andrew