diff options
author | Joan Lledó <jlledom@member.fsf.org> | 2021-06-19 12:12:36 +0200 |
---|---|---|
committer | Joan Lledó <jlledom@member.fsf.org> | 2021-11-21 11:40:17 +0100 |
commit | 90681245ff42e3962d2ee1c6f3103c6d6a9f2ed1 (patch) | |
tree | e6cfab8e4065de2b4aff01ae4f3ebb7d99c19b66 | |
parent | a40c3fdb9532fd82e83828608a632a066ffd1e8f (diff) |
pci-arbiter: allow mapping nested proxies
-rw-r--r-- | pci-arbiter/netfs_impl.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/pci-arbiter/netfs_impl.c b/pci-arbiter/netfs_impl.c index 9a55a0e7..2a0dd1c1 100644 --- a/pci-arbiter/netfs_impl.c +++ b/pci-arbiter/netfs_impl.c @@ -574,6 +574,7 @@ netfs_get_filemap (struct node *node, vm_prot_t prot) { error_t err; memory_object_t pager, proxy; + boolean_t pager_is_proxy; vm_prot_t max_prot; size_t reg_num, count; struct pci_mem_region *region; @@ -601,14 +602,17 @@ netfs_get_filemap (struct node *node, vm_prot_t prot) /* Get the pager which we are creating a proxy from */ pager = - ((struct pci_user_data *) node->nn->ln->device->user_data)-> - pagers[reg_num]; + ((struct pci_user_data *) node->nn->ln->device-> + user_data)->pagers[reg_num]; + + /* Find out whther pager is already a proxy */ + memory_object_proxy_valid (pager, &pager_is_proxy); /* Get all params to create the proxy */ max_prot = (VM_PROT_READ | VM_PROT_WRITE) & prot; objects[0] = pager; offsets[0] = 0; - starts[0] = region->base_addr; + starts[0] = pager_is_proxy ? 0 : region->base_addr; lens[0] = region->size; count = 1; |