diff --git a/ocaml/xapi/xapi_pci.ml b/ocaml/xapi/xapi_pci.ml index b11eec22f1..14931b81f0 100644 --- a/ocaml/xapi/xapi_pci.ml +++ b/ocaml/xapi/xapi_pci.ml @@ -320,38 +320,13 @@ let get_system_display_device () = None items with _ -> None -let update_dom0_access ~__context ~self ~action = - let expr = Printf.sprintf "field \"PCI\"=\"%s\"" (Ref.string_of self) in - let pgpus = Db.PGPU.get_all_records_where ~__context ~expr in - List.iter ( - fun (pgpu_ref, _) -> ( - let db_current = Db.PGPU.get_dom0_access ~__context ~self in - let db_new = - match (db_current, action) with - | `enabled, `enable | `disable_on_reboot, `enable -> - `enabled - | `disabled, `enable | `enable_on_reboot, `enable -> - `enable_on_reboot - | `enabled, `disable | `disable_on_reboot, `disable -> - `disable_on_reboot - | `disabled, `disable | `enable_on_reboot, `disable -> - `disabled - in - Db.PGPU.set_dom0_access ~__context ~self:pgpu_ref ~value:db_new - ) - ) pgpus ; - ( match action with - | `enable -> - Pciops.unhide_pci ~__context self - | `disable -> - Pciops.hide_pci ~__context self - ) - let disable_dom0_access ~__context ~self = - update_dom0_access ~__context ~self ~action:`disable + ignore + @@ Xapi_pci_helpers.update_dom0_access ~__context ~pci:self ~action:`disable let enable_dom0_access ~__context ~self = - update_dom0_access ~__context ~self ~action:`enable + ignore + @@ Xapi_pci_helpers.update_dom0_access ~__context ~pci:self ~action:`enable let is_dom0_access_enabled ~__context ~self = not (Pciops.is_pci_hidden ~__context self) diff --git a/ocaml/xapi/xapi_pci_helpers.ml b/ocaml/xapi/xapi_pci_helpers.ml index 36caab3a60..c776cd1120 100644 --- a/ocaml/xapi/xapi_pci_helpers.ml +++ b/ocaml/xapi/xapi_pci_helpers.ml @@ -172,3 +172,36 @@ let get_host_pcis () = let igd_is_whitelisted ~__context pci = let vendor_id = Db.PCI.get_vendor_id ~__context ~self:pci in List.mem vendor_id !Xapi_globs.igd_passthru_vendor_whitelist + +let update_dom0_access ~__context ~pci ~action = + let db_new = + ref + ( match action with + | `enable -> + Pciops.unhide_pci ~__context pci ; + `enabled + | `disable -> + Pciops.hide_pci ~__context pci ; + `disabled + ) + in + let expr = Printf.sprintf "field \"PCI\"=\"%s\"" (Ref.string_of pci) in + let pgpus = Db.PGPU.get_all_records_where ~__context ~expr in + List.iter + (fun (pgpu_ref, _) -> + let db_current = Db.PGPU.get_dom0_access ~__context ~self:pgpu_ref in + (db_new := + match (db_current, action) with + | `enabled, `enable | `disable_on_reboot, `enable -> + `enabled + | `disabled, `enable | `enable_on_reboot, `enable -> + `enable_on_reboot + | `enabled, `disable | `disable_on_reboot, `disable -> + `disable_on_reboot + | `disabled, `disable | `enable_on_reboot, `disable -> + `disabled + ) ; + Db.PGPU.set_dom0_access ~__context ~self:pgpu_ref ~value:!db_new + ) + pgpus ; + !db_new diff --git a/ocaml/xapi/xapi_pgpu.ml b/ocaml/xapi/xapi_pgpu.ml index 93193aca55..ec30e2b9ef 100644 --- a/ocaml/xapi/xapi_pgpu.ml +++ b/ocaml/xapi/xapi_pgpu.ml @@ -357,27 +357,8 @@ let assert_can_run_VGPU ~__context ~self ~vgpu = ~vgpu_type let update_dom0_access ~__context ~self ~action = - let db_current = Db.PGPU.get_dom0_access ~__context ~self in - let db_new = - match (db_current, action) with - | `enabled, `enable | `disable_on_reboot, `enable -> - `enabled - | `disabled, `enable | `enable_on_reboot, `enable -> - `enable_on_reboot - | `enabled, `disable | `disable_on_reboot, `disable -> - `disable_on_reboot - | `disabled, `disable | `enable_on_reboot, `disable -> - `disabled - in let pci = Db.PGPU.get_PCI ~__context ~self in - ( match db_new with - | `enabled | `enable_on_reboot -> - Pciops.unhide_pci ~__context pci - | `disabled | `disable_on_reboot -> - Pciops.hide_pci ~__context pci - ) ; - Db.PGPU.set_dom0_access ~__context ~self ~value:db_new ; - db_new + Xapi_pci_helpers.update_dom0_access ~__context ~pci ~action let enable_dom0_access ~__context ~self = update_dom0_access ~__context ~self ~action:`enable