On Friday, June 13, 2014 7:09 AM Martijn de Gouw 
[mailto:martijn.de.gouw@prodrive-
technologies.com] wrote:

> Add support for mapping and unmapping of inbound rapidio windows.
> 
> Signed-off-by: Martijn de Gouw <martijn.de.g...@prodrive.nl>
> ---
... skip ...

> +
> +int fsl_map_inb_mem(struct rio_mport *mport, dma_addr_t lstart,
> +     u64 rstart, u32 size, u32 flags)
> +{
> +     struct rio_priv *priv = mport->priv;
> +     u32 base_size;
> +     unsigned int base_size_log;
> +     u64 win_start, win_end;
> +     u32 riwar;
> +     int i;
> +
> +     base_size_log = __ilog2(size) + ((size & (size - 1)) != 0);
> +     base_size = 1 << base_size_log;
> +
> +     for (i = 0; i < RIO_INB_ATMU_COUNT; i++) {
> +             riwar = in_be32(&priv->inb_atmu_regs[i].riwar);
> +             if ((riwar & RIWAR_ENABLE) == 0)
> +                     break;
> +             /* check conflicting ranges */
> +             win_start = ((u64)(in_be32(&priv->inb_atmu_regs[i].riwbar) & 
> RIWBAR_BADD_MASK))
> +                     << RIWBAR_BADD_VAL_SHIFT;
> +             win_end = win_start + ((1 << ((riwar & RIWAR_SIZE_MASK) + 1)) - 
> 1);
> +             if (rstart < win_end && (rstart + size) > win_start)
> +                     return -EINVAL;
> +     }

It looks like the check for conflicting ranges assumes sequential mapping 
requests only.
This check will be missed if ATMU windows are dynamically mapped/unmapped 
out-of-order.
Because the unmap callback is implemented please consider possibility of using 
ATMU windows
in any order.

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@lists.ozlabs.org
https://lists.ozlabs.org/listinfo/linuxppc-dev

Reply via email to