Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp795877ybb; Fri, 3 Apr 2020 11:58:41 -0700 (PDT) X-Google-Smtp-Source: APiQypK9BAQF3ouxARNuoAwdK9P3XZyepfhfNX6VfYbdGELB05O6cdBnhgw3PuXc3YnePpv51dAv X-Received: by 2002:a05:6808:aaa:: with SMTP id r10mr3962326oij.111.1585940321429; Fri, 03 Apr 2020 11:58:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585940321; cv=none; d=google.com; s=arc-20160816; b=NBTZG+3eVhcGLFZholpaRqIja7lfC8IDVwpC2dmNWfNI5oh6fU9Qmydx3nvQpFAd8n sjFrveGw+CMcMNdLacdgMurhWP4a9no2e7ysR0h9jrII+kYhTYPOYriVd7tJA2POgnO5 SXEKDHuf2dEUx1zSyon+9zbpDu9dLNUjAlCfyy+qsCoiNX67kra/In7oKLVkV6HK0utI 2Mvx9BpH7Kx68Bba0j7EBdtk7las0dW+gQ6rDlq35Mvr2I+ym/6gbfIv6kUrbLPiPG1k hW5ilFMrzWUzT0SowNCPxsBOju0YQ95wfLQqiJ8/S0gyYCtMlo4+CiNOe+C+8SmbMYMy 2erQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=g5IL8lJ44sLe63OqUkMG0FhluuzRjw9oYGvmFBSOKwc=; b=RhAc4kQl/biSD/yGvUNSi7br8wHSNJs2w+2zvBZo5knjLUoPnRLqtUVyrhPltW2M0j GBYik7R+ffRB4+DX+FR5wk2e/44H+KUDObVtVUFa3a2FvTJSLI4rEmbK6f/mLCkfgYNs YBu41GYLgltaVsKTFxsxCNxorqnetTzUveMJLsuYPDpBjK61A88a2x7nQVpMkVO+ed6R XvrmmzXoijcMm4kYGtGIdzpUEFFIRDv3+p9JEgetBrgWZw84OWiskcEuLqqZsgXp1JUb wEj40SPyWSlC5mze4DJKlAJdrvyW3NQ+VWkJTzbc00x5u6UsbVsigAEU+hVGWQslJUmb kQpQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=KsbqPZWt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y29si4724909ote.208.2020.04.03.11.58.29; Fri, 03 Apr 2020 11:58:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=KsbqPZWt; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728702AbgDCS47 (ORCPT + 99 others); Fri, 3 Apr 2020 14:56:59 -0400 Received: from mail-wm1-f65.google.com ([209.85.128.65]:34816 "EHLO mail-wm1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728552AbgDCS44 (ORCPT ); Fri, 3 Apr 2020 14:56:56 -0400 Received: by mail-wm1-f65.google.com with SMTP id i19so8875529wmb.0; Fri, 03 Apr 2020 11:56:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=g5IL8lJ44sLe63OqUkMG0FhluuzRjw9oYGvmFBSOKwc=; b=KsbqPZWt4iG8tl6/L8/xJaRgrb6adiEVUu2L8vrCblQ8fd9bys7mAmKFOvr+bxRoMr +bDH2zrvm7Z2S/gX4YYLjke+OsongeJwD86C5kwgwp2Agr4A9xO+p+pnCfa3Qz+ag4EM p/vTcaCkN9B7XuD3IjFojy/ChethSaBLv/jmE2/vEuDNwOpXeDT5dFLvt3scVSItAbMZ BJTrL2++yFlE/XMAYGMgroG6ADcp9uxXQ7tPxuwh+BPNaNDyJ1gmOP6lLV32sK2BKIHa VvOfWNIs8GXKvNOzth/W+tbinQTOCL79b7WCZxgtwOfO1fzbY3Sn0FfgBPjEy0iIPFCE SmrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=g5IL8lJ44sLe63OqUkMG0FhluuzRjw9oYGvmFBSOKwc=; b=okrtxupXRz4dpCU1kQBes2kh1hk9eGvB8vBM8VZQviECIcdlOiyKAkbcYMd8UzMLrf rwcKgplhZgK4dK+5mn5kYgxT4zv3Sd8GsRV6y008BbYQ5m8nUHNZhfc9XNd378cI9OlG wIaiyCQF4uWSLQPFDy3j0t2etGZAyqLMECdRMeXHyDRk3M65rgxpAB03csy7bpgNrlH6 RleyBzvLIwmHHkcRUiMKsFUylNNc3FYC/I48EB7Xb7+6YgjcUOG4LQ5yK+H5P3hPkUBQ HcaYPYc8CMRydf4AOelIOed6xJNgfq4D2c19vSPrLBPHpD9hFB3BCjP7ugIn8JdPfTDe 57fg== X-Gm-Message-State: AGi0PuYlBGdT+1kJxIzdFKVjvkdqcIY3Mfteomb+01YAjO/kwJ0qhZp+ /bbG//WHb0Dl91a9dxA+Bhs= X-Received: by 2002:a1c:8097:: with SMTP id b145mr10587211wmd.159.1585940214263; Fri, 03 Apr 2020 11:56:54 -0700 (PDT) Received: from localhost (pD9E51CDC.dip0.t-ipconnect.de. [217.229.28.220]) by smtp.gmail.com with ESMTPSA id t8sm11904135wmi.43.2020.04.03.11.56.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Apr 2020 11:56:53 -0700 (PDT) From: Thierry Reding To: Rob Herring , Frank Rowand Cc: devicetree@vger.kernel.org, linux-tegra@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/4] of: reserved-memory: Support multiple regions per device Date: Fri, 3 Apr 2020 20:56:40 +0200 Message-Id: <20200403185640.118569-5-thierry.reding@gmail.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200403185640.118569-1-thierry.reding@gmail.com> References: <20200403185640.118569-1-thierry.reding@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Thierry Reding While the lookup/initialization code already supports multiple memory regions per device, the release code will only ever release the first matching memory region. Enhance the code to release all matching regions. Each attachment of a region to a device is uniquely identifiable using a struct device pointer and a pointer to the memory region's struct reserved_mem. Signed-off-by: Thierry Reding --- drivers/of/of_reserved_mem.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c index dae70b147552..3ad24df0f673 100644 --- a/drivers/of/of_reserved_mem.c +++ b/drivers/of/of_reserved_mem.c @@ -388,24 +388,22 @@ EXPORT_SYMBOL_GPL(of_reserved_mem_device_init_by_name); */ void of_reserved_mem_device_release(struct device *dev) { - struct rmem_assigned_device *rd; - struct reserved_mem *rmem = NULL; + struct rmem_assigned_device *rd, *tmp; + LIST_HEAD(release_list); mutex_lock(&of_rmem_assigned_device_mutex); - list_for_each_entry(rd, &of_rmem_assigned_device_list, list) { - if (rd->dev == dev) { - rmem = rd->rmem; - list_del(&rd->list); - kfree(rd); - break; - } + list_for_each_entry_safe(rd, tmp, &of_rmem_assigned_device_list, list) { + if (rd->dev == dev) + list_move_tail(&rd->list, &release_list); } mutex_unlock(&of_rmem_assigned_device_mutex); - if (!rmem || !rmem->ops || !rmem->ops->device_release) - return; + list_for_each_entry_safe(rd, tmp, &release_list, list) { + if (rd->rmem && rd->rmem->ops && rd->rmem->ops->device_release) + rd->rmem->ops->device_release(rd->rmem, dev); - rmem->ops->device_release(rmem, dev); + kfree(rd); + } } EXPORT_SYMBOL_GPL(of_reserved_mem_device_release); -- 2.24.1