Date: Sun, 8 Apr 2018 16:43:56 +0000 (UTC) From: Justin Hibbits <jhibbits@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r332286 - head/sys/powerpc/ofw Message-ID: <201804081643.w38GhuSN002764@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jhibbits Date: Sun Apr 8 16:43:56 2018 New Revision: 332286 URL: https://svnweb.freebsd.org/changeset/base/332286 Log: powerpc/ofw: Fix malloc inside lock Summary: Currently ofw_real_bounce_alloc() is requesting memory, using WAITOK, holding a non-sleepable locks, called 'OF Bounce Page'. Fix this by allocating the pages outside of the lock, and only updating the global variables while holding the lock. Submitted by: Breno Leitao Differential Revision: https://reviews.freebsd.org/D14955 Modified: head/sys/powerpc/ofw/ofw_real.c Modified: head/sys/powerpc/ofw/ofw_real.c ============================================================================== --- head/sys/powerpc/ofw/ofw_real.c Sun Apr 8 16:34:10 2018 (r332285) +++ head/sys/powerpc/ofw/ofw_real.c Sun Apr 8 16:43:56 2018 (r332286) @@ -197,6 +197,8 @@ ofw_real_stop(void) static void ofw_real_bounce_alloc(void *junk) { + caddr_t temp; + /* * Check that ofw_real is actually in use before allocating wads * of memory. Do this by checking if our mutex has been set up. @@ -208,12 +210,15 @@ ofw_real_bounce_alloc(void *junk) * Allocate a page of contiguous, wired physical memory that can * fit into a 32-bit address space and accessed from real mode. */ + temp = contigmalloc(4 * PAGE_SIZE, M_OFWREAL, 0, 0, + ulmin(platform_real_maxaddr(), BUS_SPACE_MAXADDR_32BIT), PAGE_SIZE, + 4 * PAGE_SIZE); + if (temp == NULL) + panic("%s: Not able to allocated contiguous memory\n", __func__); mtx_lock(&of_bounce_mtx); - of_bounce_virt = contigmalloc(4 * PAGE_SIZE, M_OFWREAL, 0, 0, - ulmin(platform_real_maxaddr(), BUS_SPACE_MAXADDR_32BIT), PAGE_SIZE, - 4 * PAGE_SIZE); + of_bounce_virt = temp; of_bounce_phys = vtophys(of_bounce_virt); of_bounce_size = 4 * PAGE_SIZE;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201804081643.w38GhuSN002764>