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