bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 libpciaccess] hurd: Don't necessarily look up _SERVERS_BUS


From: Samuel Thibault
Subject: Re: [PATCH v2 libpciaccess] hurd: Don't necessarily look up _SERVERS_BUS_PCI
Date: Tue, 15 Feb 2022 14:46:36 +0100
User-agent: NeoMutt/20170609 (1.8.3)

Damien Zammit, le mar. 15 févr. 2022 06:44:23 +0000, a ecrit:
> This allows the fallback mechanism in the hurd create method to be
> used in the map range method by reusing the mach port that
> corresponds to the root of the pci filesystem.

Applied, thanks!

> ---
>  src/hurd_pci.c | 23 +++++++++++++++++------
>  1 file changed, 17 insertions(+), 6 deletions(-)
> 
> diff --git a/src/hurd_pci.c b/src/hurd_pci.c
> index 70a9f89..5492513 100644
> --- a/src/hurd_pci.c
> +++ b/src/hurd_pci.c
> @@ -69,6 +69,7 @@ typedef enum {
> 
>  struct pci_system_hurd {
>      struct pci_system system;
> +    mach_port_t root;
>  };
> 
>  static int
> @@ -150,10 +151,20 @@ pci_device_hurd_probe(struct pci_device *dev)
>      return 0;
>  }
> 
> +static void
> +pci_system_hurd_destroy(void)
> +{
> +    struct pci_system_hurd *pci_sys_hurd = (struct pci_system_hurd *)pci_sys;
> +
> +    x86_disable_io();
> +    mach_port_deallocate(mach_task_self(), pci_sys_hurd->root);
> +}
> +
>  static int
>  pci_device_hurd_map_range(struct pci_device *dev,
>      struct pci_device_mapping *map)
>  {
> +    struct pci_system_hurd *pci_sys_hurd = (struct pci_system_hurd *)pci_sys;
>      int err = 0;
>      file_t file = MACH_PORT_NULL;
>      memory_object_t robj, wobj, pager;
> @@ -168,11 +179,11 @@ pci_device_hurd_map_range(struct pci_device *dev,
>          flags = O_RDWR;
>      }
> 
> -    snprintf(server, NAME_MAX, "%s/%04x/%02x/%02x/%01u/%s%01u",
> -            _SERVERS_BUS_PCI, dev->domain, dev->bus, dev->dev, dev->func,
> -            FILE_REGION_NAME, map->region);
> +    snprintf(server, NAME_MAX, "%04x/%02x/%02x/%01u/%s%01u",
> +             dev->domain, dev->bus, dev->dev, dev->func,
> +             FILE_REGION_NAME, map->region);
> 
> -    file = file_name_lookup (server, flags, 0);
> +    file = file_name_lookup_under (pci_sys_hurd->root, server, flags, 0);
>      if (! MACH_PORT_VALID (file)) {
>          return errno;
>      }
> @@ -580,7 +591,7 @@ enum_devices(mach_port_t pci_port, const char *parent, 
> int domain,
>  }
> 
>  static const struct pci_system_methods hurd_pci_methods = {
> -    .destroy = pci_system_x86_destroy,
> +    .destroy = pci_system_hurd_destroy,
>      .destroy_device = pci_device_hurd_destroy_device,
>      .read_rom = pci_device_hurd_read_rom,
>      .probe = pci_device_hurd_probe,
> @@ -658,8 +669,8 @@ pci_system_hurd_create(void)
>          return errno;
>      }
> 
> +    pci_sys_hurd->root = root;
>      err = enum_devices (root, ".", -1, -1, -1, -1, LEVEL_DOMAIN);
> -    mach_port_deallocate (mach_task_self (), root);
>      if (err) {
>          pci_system_cleanup();
>          return err;
> --
> 2.34.1
> 
> 
> 

-- 
Samuel
>       dvips -o $@ $<     
Faut faire gffe de pas te couper avec ton truc, t'as mis des ciseaux ($<)
partout :))
-+- Dom in Guide du linuxien pervers - "J'aime pas les Makefile !" -+-



reply via email to

[Prev in Thread] Current Thread [Next in Thread]