From: Stephen Warren <swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
To: Hiroshi DOYU <hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
Cc: iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org,
linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
Chris Wright <chrisw-69jw2NvuJkxg9hUCZPvPmw@public.gmane.org>
Subject: Re: [v2 1/1] iommu/tegra: smmu: Fix unsleepable memory allocation at alloc_pdir()
Date: Thu, 28 Jun 2012 10:57:18 -0600 [thread overview]
Message-ID: <4FEC8CEE.1000401@wwwdotorg.org> (raw)
In-Reply-To: <1340880707-6934-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
On 06/28/2012 04:51 AM, Hiroshi DOYU wrote:
> alloc_pdir() is called from smmu_iommu_domain_init() with spin_lock
> held. memory allocations in alloc_pdir() had to be
> atomic/unsleepable. Instead of converting into atomic allocation, this
> patch once releases a lock, do the allocation, hold the lock again and
> then see if it's raced or not in order to avoid introducing mutex.
> ---
You'd typically want to include a brief description of what changed from
v1->v2 here, as a hint to reviewers re: what to concentrate on.
> +static int alloc_pdir(struct smmu_as *as, unsigned long *flags)
> + spin_unlock_irqrestore(&as->lock, *flags);
> + cnt = devm_kzalloc(smmu->dev,
> + sizeof(cnt[0]) * SMMU_PDIR_COUNT, GFP_KERNEL);
> + page = alloc_page(GFP_KERNEL | __GFP_DMA);
> + spin_lock_irqsave(&as->lock, *flags);
> +
> + if (as->pdir_page) {
> + /* We raced, free the redundant */
> + err = -ENODEV;
> + goto err_out;
> }
Is that really an error; it just means that something else allocated the
same pdir already. Since the top of the function does:
if (as->pdir_page)
return 0;
I'd expect to s/err = -ENODEV/err = 0/ inside that if condition that I
quoted above, but still of cause "goto err_out" to free the now unneeded
allocations.
Aside from that, I think this looks reasonable.
next prev parent reply other threads:[~2012-06-28 16:57 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-26 18:15 tegra alloc_pdir Chris Wright
[not found] ` <20120626181555.GW15796-JyIX8gxvWYPr2PDY2+4mTGD2FQJk+8+b@public.gmane.org>
2012-06-27 9:46 ` Hiroshi Doyu
[not found] ` <20120627.124628.673793050413876363.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-06-27 9:54 ` [PATCH 1/1] iommu/tegra: smmu: Fix unsleepable memory allocation Hiroshi DOYU
[not found] ` <1340790841-23349-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-06-27 15:57 ` Chris Wright
2012-06-27 16:59 ` Stephen Warren
[not found] ` <4FEB3C04.6040606-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-06-28 10:42 ` Hiroshi Doyu
[not found] ` <20120628134202.2102f715496a3b980b43f3b0-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-06-28 10:51 ` [v2 1/1] iommu/tegra: smmu: Fix unsleepable memory allocation at alloc_pdir() Hiroshi DOYU
[not found] ` <1340880707-6934-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-06-28 16:57 ` Stephen Warren [this message]
[not found] ` <4FEC8CEE.1000401-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-06-28 18:35 ` Hiroshi Doyu
[not found] ` <20120628.213554.1189327754979133382.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-06-28 19:08 ` Stephen Warren
[not found] ` <4FECAB9C.9040809-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2012-06-28 19:19 ` Hiroshi Doyu
[not found] ` <20120628.221945.1306825810095951985.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-06-29 6:15 ` [v3 1/2] iommu/tegra: smmu: Remove unnecessary sanity check " Hiroshi DOYU
[not found] ` <1340950527-16482-1-git-send-email-hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-06-29 6:15 ` [v3 2/2] iommu/tegra: smmu: Fix unsleepable memory allocation " Hiroshi DOYU
2012-06-29 15:34 ` [v3 1/2] iommu/tegra: smmu: Remove unnecessary sanity check " Stephen Warren
2012-07-02 9:57 ` [PATCH 1/1] iommu/tegra: smmu: Fix unsleepable memory allocation Joerg Roedel
[not found] ` <20120702095747.GB2558-5C7GfCeVMHo@public.gmane.org>
2012-07-02 10:13 ` Hiroshi Doyu
[not found] ` <20120702.131326.685361720133451299.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-07-02 10:19 ` Hiroshi Doyu
[not found] ` <20120702.131903.1053229523265080291.hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org>
2012-07-02 10:42 ` joerg.roedel-5C7GfCeVMHo
[not found] ` <20120702104231.GD2558-5C7GfCeVMHo@public.gmane.org>
2012-07-02 11:14 ` Hiroshi Doyu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4FEC8CEE.1000401@wwwdotorg.org \
--to=swarren-3lzwwm7+weoh9zmkesr00q@public.gmane.org \
--cc=chrisw-69jw2NvuJkxg9hUCZPvPmw@public.gmane.org \
--cc=hdoyu-DDmLM1+adcrQT0dZR+AlfA@public.gmane.org \
--cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=linux-tegra-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.