From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751938AbYKRIzF (ORCPT ); Tue, 18 Nov 2008 03:55:05 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1751419AbYKRIyX (ORCPT ); Tue, 18 Nov 2008 03:54:23 -0500 Received: from cn.fujitsu.com ([222.73.24.84]:57880 "EHLO song.cn.fujitsu.com" rhost-flags-OK-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1751332AbYKRIyW (ORCPT ); Tue, 18 Nov 2008 03:54:22 -0500 Message-ID: <492281FE.4000301@cn.fujitsu.com> Date: Tue, 18 Nov 2008 16:51:10 +0800 From: Lai Jiangshan User-Agent: Thunderbird 2.0.0.17 (Windows/20080914) MIME-Version: 1.0 To: Andrew Morton CC: Johannes Weiner , David Miller , Dave Airlie , Paul Menage , kamezawa.hiroyu@jp.fujitsu.com, Balbir Singh , Arjan van de Ven , Jan Kara , Jes Sorensen , KOSAKI Motohiro , dada1@cosmosbay.com, Alexey Dobriyan , Jens Axboe , Linux Kernel Mailing List , "Paul E. McKenney" , Nick Piggin , Al Viro , Rik van Riel , Pekka Enberg Subject: [PATCH V2 2/4] mm: introduce kvfree_atomic() References: <492162E4.9080902@cn.fujitsu.com> <20081117131440.GB29931@cmpxchg.org> In-Reply-To: <20081117131440.GB29931@cmpxchg.org> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org fdtable and sysipc use vfree() in RCU callback. this patch introduce vfree_atomic() for them. Signed-off-by: Lai Jiangshan --- diff --git a/include/linux/mm.h b/include/linux/mm.h index ff89388..aa7b5ca 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -280,6 +280,7 @@ static inline int is_vmalloc_addr(const void *x) void *kvmalloc(unsigned long size, gfp_t flags); void kvfree(void *ptr); +void kvfree_atomic(void *ptr); static inline struct page *compound_head(struct page *page) { diff --git a/mm/util.c b/mm/util.c index 66d1a12..ed2d317 100644 --- a/mm/util.c +++ b/mm/util.c @@ -197,6 +197,15 @@ void kvfree(void *ptr) } EXPORT_SYMBOL(kvfree); +void kvfree_atomic(void *ptr) +{ + if (is_vmalloc_addr(ptr)) + vfree_atomic(ptr); + else + kfree(ptr); +} +EXPORT_SYMBOL(kvfree_atomic); + #ifndef HAVE_ARCH_PICK_MMAP_LAYOUT void arch_pick_mmap_layout(struct mm_struct *mm) {