svn commit: r300644 - head/sys/dev/hyperv/vmbus

Sepherosa Ziehau sephe at FreeBSD.org
Wed May 25 03:30:57 UTC 2016


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",


More information about the svn-src-all mailing list