From patchwork Fri Jul 22 16:41:23 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Cameron X-Patchwork-Id: 106344 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from mail-ww0-f56.google.com (mail-ww0-f56.google.com [74.125.82.56]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority" (verified OK)) by ozlabs.org (Postfix) with ESMTPS id C1F50B6F7A for ; Sat, 23 Jul 2011 02:41:35 +1000 (EST) Received: by wwf22 with SMTP id 22sf4102670wwf.11 for ; Fri, 22 Jul 2011 09:41:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=beta; h=mime-version:x-beenthere:received-spf:x-cam-antivirus :x-cam-spamdetails:x-cam-scannerinfo:from:to:cc:subject:date :message-id:x-mailer:in-reply-to:references:x-original-sender :x-original-authentication-results:reply-to:precedence:mailing-list :list-id:x-google-group-id:list-post:list-help:list-archive:sender :list-subscribe:list-unsubscribe:content-type; bh=bj0eKUY/IiigpE8pXj+s42EVMtpa/c0Qu3h12cK+GHA=; b=gArXHOyt4Zzq0VzNfE3MWtrF6pqmKUdIX3JPV5JlDlnIZCNWTebz1N0bGeE+qUZXx7 158RvG3v9R59Blbw8vwSFjdWN2dA3kUPmXD3ouaPaid/LWVZbe4Pip3xZrQ7aBPK/FDB MbtDBe3/hgT5/qzCeMQieVDET28BADoNwFO2U= Received: by 10.216.17.202 with SMTP id j52mr1033606wej.20.1311352890680; Fri, 22 Jul 2011 09:41:30 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: rtc-linux@googlegroups.com Received: by 10.227.153.168 with SMTP id k40ls1565248wbw.0.gmail; Fri, 22 Jul 2011 09:41:30 -0700 (PDT) Received: by 10.217.0.129 with SMTP id l1mr141214wes.5.1311352890357; Fri, 22 Jul 2011 09:41:30 -0700 (PDT) Received: by 10.217.0.129 with SMTP id l1mr141213wes.5.1311352890296; Fri, 22 Jul 2011 09:41:30 -0700 (PDT) Received: from ppsw-51.csi.cam.ac.uk (ppsw-51.csi.cam.ac.uk [131.111.8.151]) by gmr-mx.google.com with ESMTP id fh14si2632528wbb.0.2011.07.22.09.41.30; Fri, 22 Jul 2011 09:41:30 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of jic23@cam.ac.uk designates 131.111.8.151 as permitted sender) client-ip=131.111.8.151; X-Cam-AntiVirus: no malware found X-Cam-SpamDetails: not scanned X-Cam-ScannerInfo: http://www.cam.ac.uk/cs/email/scanner/ Received: from arcturus.eng.cam.ac.uk ([129.169.154.73]:58777 helo=localhost.eng.cam.ac.uk) by ppsw-51.csi.cam.ac.uk (smtp.hermes.cam.ac.uk [131.111.8.158]:465) with esmtpsa (LOGIN:jic23) (TLSv1:DHE-RSA-AES256-SHA:256) id 1QkImz-0004Oy-WL (Exim 4.72) (return-path ); Fri, 22 Jul 2011 17:41:25 +0100 From: Jonathan Cameron To: linux-kernel@vger.kernel.org Cc: lm-sensors@lm-sensors.org, rtc-linux@googlegroups.com, osd-dev@open-osd.org, linux-scsi@vger.kernel.org, dri-devel@lists.freedesktop.org, jkosina@suse.cz, naota@elisp.net, rusty@rustcorp.com.au, paulmck@linux.vnet.ibm.com, namhyung@gmail.com, randy.dunlap@oracle.com, tj@kernel.org, cabarnes@indesign-llc.com, akpm@linux-foundation.org, airlied@redhat.com, thellstrom@vmware.com, johnpol@2ka.mipt.ru, JBottomley@parallels.com, bhalevy@panasas.com, bharrosh@panasas.com, a.zummo@towertech.it, guenter.roeck@ericsson.com, khali@linux-fr.org, airlied@linux.ie, Jonathan Cameron Subject: [rtc-linux] [PATCH 5/8] drm/vmwgfx: use ida_simple_get for id allocation. Date: Fri, 22 Jul 2011 17:41:23 +0100 Message-Id: <1311352886-4047-15-git-send-email-jic23@cam.ac.uk> X-Mailer: git-send-email 1.7.3.4 In-Reply-To: <1311352886-4047-1-git-send-email-jic23@cam.ac.uk> References: <1311352886-4047-1-git-send-email-jic23@cam.ac.uk> X-Original-Sender: jic23@cam.ac.uk X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: best guess record for domain of jic23@cam.ac.uk designates 131.111.8.151 as permitted sender) smtp.mail=jic23@cam.ac.uk Reply-To: rtc-linux@googlegroups.com Precedence: list Mailing-list: list rtc-linux@googlegroups.com; contact rtc-linux+owners@googlegroups.com List-ID: X-Google-Group-Id: 712029733259 List-Post: , List-Help: , List-Archive: Sender: rtc-linux@googlegroups.com List-Subscribe: , List-Unsubscribe: , Some messing with error codes to return 0 on out id's and match current situation. Is this necessary? Looks a touch 'interesting'. Signed-off-by: Jonathan Cameron --- drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c | 34 ++++++------------------- 1 files changed, 8 insertions(+), 26 deletions(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c index ac6e0d1..d51577b 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c @@ -37,7 +37,6 @@ #include struct vmwgfx_gmrid_man { - spinlock_t lock; struct ida gmr_ida; uint32_t max_gmr_ids; }; @@ -49,34 +48,20 @@ static int vmw_gmrid_man_get_node(struct ttm_mem_type_manager *man, { struct vmwgfx_gmrid_man *gman = (struct vmwgfx_gmrid_man *)man->priv; - int ret; int id; mem->mm_node = NULL; - do { - if (unlikely(ida_pre_get(&gman->gmr_ida, GFP_KERNEL) == 0)) - return -ENOMEM; - - spin_lock(&gman->lock); - ret = ida_get_new(&gman->gmr_ida, &id); - - if (unlikely(ret == 0 && id >= gman->max_gmr_ids)) { - ida_remove(&gman->gmr_ida, id); - spin_unlock(&gman->lock); + id = ida_simple_get(&gman->gmr_ida, 0, gman->max_gmr_ids, GFP_KERNEL); + if (id < 0) { + if (id == -ENOSPC) return 0; - } - - spin_unlock(&gman->lock); - - } while (ret == -EAGAIN); - - if (likely(ret == 0)) { - mem->mm_node = gman; - mem->start = id; + return id; } + mem->mm_node = gman; + mem->start = id; - return ret; + return 0; } static void vmw_gmrid_man_put_node(struct ttm_mem_type_manager *man, @@ -86,9 +71,7 @@ static void vmw_gmrid_man_put_node(struct ttm_mem_type_manager *man, (struct vmwgfx_gmrid_man *)man->priv; if (mem->mm_node) { - spin_lock(&gman->lock); - ida_remove(&gman->gmr_ida, mem->start); - spin_unlock(&gman->lock); + ida_simple_remove(&gman->gmr_ida, mem->start); mem->mm_node = NULL; } } @@ -102,7 +85,6 @@ static int vmw_gmrid_man_init(struct ttm_mem_type_manager *man, if (unlikely(gman == NULL)) return -ENOMEM; - spin_lock_init(&gman->lock); ida_init(&gman->gmr_ida); gman->max_gmr_ids = p_size; man->priv = (void *) gman;