]> xenbits.xensource.com Git - xenclient/toolstack.git/commitdiff
add a proper pci exception when the devices hasn't been added.
authorVincent Hanquez <vincent.hanquez@eu.citrix.com>
Fri, 26 Jun 2009 09:33:12 +0000 (10:33 +0100)
committerVincent Hanquez <vincent.hanquez@eu.citrix.com>
Fri, 26 Jun 2009 09:33:12 +0000 (10:33 +0100)
xenops/device.ml
xenops/device.mli

index e6c562823d99ec9ec37a569b6420f2a39a0cc3aa..5b7bc20b2dea1982c2e7d9a7ea6b27b6f9ca721b 100644 (file)
@@ -832,6 +832,9 @@ type t = {
        driver: string;
 }
 
+type dev = int * int * int * int
+
+exception Cannot_add of dev list * exn (* devices, reason *)
 exception Cannot_use_pci_with_no_pciback of t list
 
 let get_from_system domain bus slot func =
@@ -882,7 +885,7 @@ let grant_access_resources xc domid resources v =
                )
        ) resources
 
-let add ~xc ~xs ~hvm ~msitranslate pcidevs domid devid =
+let add_noexn ~xc ~xs ~hvm ~msitranslate pcidevs domid devid =
        let pcidevs = List.map (fun (domain, bus, slot, func) ->
                let (irq, resources, driver) = get_from_system domain bus slot func in
                { domain = domain; bus = bus; slot = slot; func = func;
@@ -918,7 +921,7 @@ let add ~xc ~xs ~hvm ~msitranslate pcidevs domid devid =
                "online", "1";
                "num_devs", string_of_int (List.length xsdevs);
                "state", string_of_int (Xenbus.int_of Xenbus.Initialising);
-                "msitranslate", string_of_int (msitranslate);
+               "msitranslate", string_of_int (msitranslate);
        ] and frontendlist = [
                "backend-id", "0";
                "state", string_of_int (Xenbus.int_of Xenbus.Initialising);
@@ -926,6 +929,11 @@ let add ~xc ~xs ~hvm ~msitranslate pcidevs domid devid =
        Generic.add_device ~xs device (xsdevs @ backendlist) frontendlist;
        ()
 
+let add ~xc ~xs ~hvm ~msitranslate pcidevs domid devid =
+       try add_noexn ~xc ~xs ~hvm ~msitranslate pcidevs domid devid
+       with exn ->
+               raise (Cannot_add (pcidevs, exn))
+
 let release ~xc ~xs ~hvm pcidevs domid devid =
        let pcidevs = List.map (fun (domain, bus, slot, func) ->
                let (irq, resources, driver) = get_from_system domain bus slot func in
index 05bf1c658159a980f0ddfca1e1eeaa8f8a390e0e..da17c9703023f0123a3f540da8de12ccc31cb3f1 100644 (file)
@@ -124,15 +124,17 @@ sig
                resources: (int64 * int64 * int64) list;
                driver: string;
        }
+       type dev = int * int * int * int
 
+       exception Cannot_add of (dev list) * exn
        exception Cannot_use_pci_with_no_pciback of t list
 
        val add : xc:Xc.handle -> xs:Xs.xsh -> hvm:bool -> msitranslate:int
-              -> (int * int * int * int) list -> Xc.domid -> int -> unit
+              -> dev list -> Xc.domid -> int -> unit
        val release : xc:Xc.handle -> xs:Xs.xsh -> hvm:bool
-              -> (int * int * int * int) list -> Xc.domid -> int -> unit
+              -> dev list -> Xc.domid -> int -> unit
        val reset : xs:Xs.xsh -> device -> unit
-       val bind : (int * int * int * int) list -> unit
+       val bind : dev list -> unit
 end
 
 module Dm :