From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 7987C137C for ; Sat, 8 Dec 2018 18:02:44 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E0D4E307EAA8; Sat, 8 Dec 2018 17:02:42 +0000 (UTC) Received: from ktraynor.remote.csb (ovpn-116-41.ams2.redhat.com [10.36.116.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 88E2460C45; Sat, 8 Dec 2018 17:02:40 +0000 (UTC) To: "Stojaczyk, Dariusz" Cc: "stable@dpdk.org" , "Howell, Seth" , "Burakov, Anatoly" , Christian Ehrhardt References: <20181204170610.250124-1-seth.howell@intel.com> <20181207201042.372870-1-seth.howell@intel.com> From: Kevin Traynor Organization: Red Hat Message-ID: Date: Sat, 8 Dec 2018 09:02:38 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.44]); Sat, 08 Dec 2018 17:02:43 +0000 (UTC) Subject: Re: [dpdk-stable] [PATCH v2] malloc: notify primary process about hotplug in secondary X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 08 Dec 2018 17:02:44 -0000 On 12/07/2018 12:30 PM, Stojaczyk, Dariusz wrote: > Hi Kevin, is the merge window for DPDK 18.08.1 and 18.05.2 still open? This fix is critical for multi-process memory hotplug and you might want to pull it in. > D. > Hi Dariusz, I can still take patches for 18.08.1 but the patch must be applied in the main tree before it can be backported. DPDK 18.05 is not maintained anymore. >> -----Original Message----- >> From: Howell, Seth >> Sent: Friday, December 7, 2018 9:11 PM >> To: Burakov, Anatoly >> Cc: dev@dpdk.org; stable@dpdk.org; Howell, Seth >> ; Stojaczyk, Dariusz >> Subject: [PATCH v2] malloc: notify primary process about hotplug in >> secondary >> >> When secondary process hotplugs memory, it sends a request >> to primary, which then performs the real mmap() and sends >> sync requests to all secondary processes. Upon receiving >> such sync request, each secondary process will notify the >> upper layers of hotplugged memory (and will call all >> locally registered event callbacks). >> >> In the end we'll end up with memory event callbacks fired >> in all the processes except the primary, which is a bug. >> >> This gets critical if memory is hotplugged while a VFIO >> device is attached, as the VFIO memory registration - >> which is done from a memory event callback present in the >> primary process only - is never called. >> >> After this patch, a primary process fires memory event >> callbacks before secondary processes start their >> synchronizations - both for hotplug and hotremove. >> >> Fixes: 07dcbfe0101f ("malloc: support multiprocess memory hotplug") In this case I know because you mailed, but for future, 'Cc: stable@dpdk.org' tag should also be inserted here in the commit message so it can be found by scripts. Kevin. >> >> Signed-off-by: Seth Howell >> Signed-off-by: Darek Stojaczyk >> --- >> lib/librte_eal/common/malloc_mp.c | 8 ++++++++ >> 1 file changed, 8 insertions(+) >> >> diff --git a/lib/librte_eal/common/malloc_mp.c >> b/lib/librte_eal/common/malloc_mp.c >> index 5f2d4e0be..f3a13353b 100644 >> --- a/lib/librte_eal/common/malloc_mp.c >> +++ b/lib/librte_eal/common/malloc_mp.c >> @@ -209,6 +209,8 @@ handle_alloc_request(const struct malloc_mp_req >> *m, >> >> map_addr = ms[0]->addr; >> >> + eal_memalloc_mem_event_notify(RTE_MEM_EVENT_ALLOC, >> map_addr, alloc_sz); >> + >> /* we have succeeded in allocating memory, but we still need to sync >> * with other processes. however, since DPDK IPC is single-threaded, >> we >> * send an asynchronous request and exit this callback. >> @@ -258,6 +260,9 @@ handle_request(const struct rte_mp_msg *msg, >> const void *peer __rte_unused) >> if (m->t == REQ_TYPE_ALLOC) { >> ret = handle_alloc_request(m, entry); >> } else if (m->t == REQ_TYPE_FREE) { >> + eal_memalloc_mem_event_notify(RTE_MEM_EVENT_FREE, >> + m->free_req.addr, m->free_req.len); >> + >> ret = malloc_heap_free_pages(m->free_req.addr, >> m->free_req.len); >> } else { >> @@ -436,6 +441,9 @@ handle_sync_response(const struct rte_mp_msg >> *request, >> memset(&rb_msg, 0, sizeof(rb_msg)); >> >> /* we've failed to sync, so do a rollback */ >> + eal_memalloc_mem_event_notify(RTE_MEM_EVENT_FREE, >> + state->map_addr, state->map_len); >> + >> rollback_expand_heap(state->ms, state->ms_len, state- >>> elem, >> state->map_addr, state->map_len); >> >> -- >> 2.17.2 >