Author: sephe
Date: Wed May 25 03:30:56 2016
New Revision: 300644
URL: https://svnweb.freebsd.org/changeset/base/300644

Log:
  hyperv/vmbus: Check hyperv_dmamem_alloc return value
  
  Though it is highly unlikely this function would fail w/ BUS_DMA_WAITOK,
  we had better to check its return value; better safe then sorry here.
  
  MFC after:    1 week
  Sponsored by: Microsoft OSTC
  Differential Revision:        https://reviews.freebsd.org/D6518

Modified:
  head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c

Modified: head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c    Wed May 25 02:51:15 
2016        (r300643)
+++ head/sys/dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c    Wed May 25 03:30:56 
2016        (r300644)
@@ -321,24 +321,34 @@ vmbus_synic_teardown(void *arg)
        wrmsr(HV_X64_MSR_SIEFP, siefp.as_uint64_t);
 }
 
-static void
+static int
 vmbus_dma_alloc(struct vmbus_softc *sc)
 {
        int cpu;
 
        CPU_FOREACH(cpu) {
+               void *ptr;
+
                /*
                 * Per-cpu messages and event flags.
                 */
-               VMBUS_PCPU_GET(sc, message, cpu) = hyperv_dmamem_alloc(
-                   bus_get_dma_tag(sc->vmbus_dev), PAGE_SIZE, 0, PAGE_SIZE,
+               ptr = hyperv_dmamem_alloc(bus_get_dma_tag(sc->vmbus_dev),
+                   PAGE_SIZE, 0, PAGE_SIZE,
                    VMBUS_PCPU_PTR(sc, message_dma, cpu),
                    BUS_DMA_WAITOK | BUS_DMA_ZERO);
-               VMBUS_PCPU_GET(sc, event_flag, cpu) = hyperv_dmamem_alloc(
-                   bus_get_dma_tag(sc->vmbus_dev), PAGE_SIZE, 0, PAGE_SIZE,
+               if (ptr == NULL)
+                       return ENOMEM;
+               VMBUS_PCPU_GET(sc, message, cpu) = ptr;
+
+               ptr = hyperv_dmamem_alloc(bus_get_dma_tag(sc->vmbus_dev),
+                   PAGE_SIZE, 0, PAGE_SIZE,
                    VMBUS_PCPU_PTR(sc, event_flag_dma, cpu),
                    BUS_DMA_WAITOK | BUS_DMA_ZERO);
+               if (ptr == NULL)
+                       return ENOMEM;
+               VMBUS_PCPU_GET(sc, event_flag, cpu) = ptr;
        }
+       return 0;
 }
 
 static void
@@ -622,7 +632,9 @@ vmbus_bus_init(void)
        /*
         * Allocate DMA stuffs.
         */
-       vmbus_dma_alloc(sc);
+       ret = vmbus_dma_alloc(sc);
+       if (ret != 0)
+               goto cleanup;
 
        if (bootverbose)
                printf("VMBUS: Calling smp_rendezvous, smp_started = %d\n",
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to