[igt-dev] [PATCH i-g-t 2/3] lib/igt_device: add igt_map_bar_region

Chris Wilson chris at chris-wilson.co.uk
Thu Apr 4 13:30:48 UTC 2019


Quoting Daniel Mrzyglod (2019-04-04 14:18:04)
> This function use sysfs to map particular mmio region.
> 
> Signed-off-by: Daniel Mrzyglod <daniel.t.mrzyglod at intel.com>
> ---
>  lib/igt_device.c | 41 +++++++++++++++++++++++++++++++++++++++++
>  lib/igt_device.h |  1 +
>  2 files changed, 42 insertions(+)
> 
> diff --git a/lib/igt_device.c b/lib/igt_device.c
> index d3934efb..805109e5 100644
> --- a/lib/igt_device.c
> +++ b/lib/igt_device.c
> @@ -220,3 +220,44 @@ struct pci_device *igt_device_get_pci_device(int fd)
>  
>         return pci_dev;
>  }
> +
> +/**
> + * igt_device_map_pci_bar_region:
> + *
> + * @fd: the device
> + * @mmio_bar: bar to be mapped
> + * @mmio_size: bar size
> + *
> + * Returns:
> + * The pointer for mmapped bar
> + */
> +void *igt_device_map_pci_bar_region(int fd, int  mmio_bar, int mmio_size)
> +{
> +       struct igt_pci_addr pci_addr;
> +       char filepath[4096];
> +       int newfd;
> +       void *igt_mmio = NULL;
> +
> +       if (igt_device_get_pci_addr(fd, &pci_addr)) {
> +               igt_warn("Unable to find device PCI address\n");
> +               return NULL;
> +       }
> +
> +       sprintf(filepath, "/sys/devices/pci%.4x\:%.2x/%.4x\:%.2x\:%.2x.%.1x/resource%.1x",

Might as well use asprintf rather than a [4096]

Certainly snprintf is good habit (if irrelevant here).

> +                       pci_addr.domain,
> +                       pci_addr.bus,
> +                       pci_addr.domain,
> +                       pci_addr.bus,
> +                       pci_addr.device,
> +                       pci_addr.function,
> +                       mmio_bar);

> +
> +

Bonus
.

> +       newfd = open(filepath, O_RDWR | O_SYNC);
> +       igt_mmio = mmap(0, mmio_size, PROT_READ | PROT_WRITE, MAP_SHARED, newfd, 0);

Leaking newfd for fun and profit?

> +
> +       igt_fail_on_f(igt_mmio == MAP_FAILED,
> +                     "Couldn't map MMIO region\n");
> +
> +       return igt_mmio;
> +}


More information about the igt-dev mailing list