linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Arnd Bergmann" <arnd@arndb.de>
To: "Andreas Larsson" <andreas@gaisler.com>,
	"Sam Ravnborg" <sam@ravnborg.org>,
	"Maciej W. Rozycki" <macro@orcam.me.uk>,
	sparclinux@vger.kernel.org,
	"Randy Dunlap" <rdunlap@infradead.org>
Cc: "Miquel Raynal" <miquel.raynal@bootlin.com>,
	linux-parport@lists.infradead.org,
	"David S . Miller" <davem@davemloft.net>,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 4/7] sparc32: Do not select ZONE_DMA
Date: Wed, 06 Mar 2024 17:22:25 +0100	[thread overview]
Message-ID: <001ba36a-9d4c-45c4-b1f2-448824848afc@app.fastmail.com> (raw)
In-Reply-To: <5d97d50a-9d40-4651-8071-073dee5f9aa8@gaisler.com>

On Wed, Mar 6, 2024, at 16:31, Andreas Larsson wrote:
> On 2024-03-06 15:45, Arnd Bergmann wrote:
>> More specifically, what do you see in the boot log for the
>> size of each zone? 
>
> dma_set_mask_and_coherent(dev, DMA_BIT_MASK(28)) fails with
> the ZONE_DMA removed, and no other differences. Boot log:
>
> 831MB HIGHMEM available.
> Zone ranges:
>   Normal   [mem 0x0000000000000000-0x000000000bffffff]
>   HighMem  [mem 0x000000000c000000-0x000000003fff7fff]


> dma_set_mask_and_coherent(dev, DMA_BIT_MASK(28)) succeeds with
> ZONE_DMA still in place (i.e. the above plus the ZONE_DMA patch
> reverted and no other differences). Boot log:
>
> 831MB HIGHMEM available.
> Zone ranges:
>   DMA      [mem 0x0000000000000000-0x000000000bffffff]
>   Normal   empty
>   HighMem  [mem 0x000000000c000000-0x000000003fff7fff]

That sounds like a bug somewhere else. As Sam explained in
the patch description, ZONE_NORMAL and ZONE_DMA always have
the same limit, which explains that without the patch you
only have DMA and highmem, but not normal.

What we expected to happen here is that anything that asks
for ZONE_DMA memory just uses ZONE_NORMAL instead and the
behavior never changes.

It looks like this is not how dma_direct_supported()
works though:

        u64 min_mask = (max_pfn - 1) << PAGE_SHIFT;
        [...]
        /*
         * This check needs to be against the actual bit mask value, so use
         * phys_to_dma_unencrypted() here so that the SME encryption mask isn't
         * part of the check.
         */     
        if (IS_ENABLED(CONFIG_ZONE_DMA))
                min_mask = min_t(u64, min_mask, DMA_BIT_MASK(zone_dma_bits));
        return mask >= phys_to_dma_unencrypted(dev, min_mask);

Without ZONE_DMA, it checks for the highest page of any
zone, but that is ZONE_HIGHMEM in your case, which apparently
is outside of the device's mask, while ZONE_NORMAL is inside
the mask.

Not sure if it's worth changing the generic code for this,
or if we want to just keep the existing version without
Sam's patch now that we understand the issue.

On a relate note, it does seem odd to have such a small
lowmem area, and I wonder if that could be extended.
The 192MB lowmem limit comes from 

#define SRMMU_MAXMEM            0x0c000000

but I don't understand if that is a hardware limitation
or a design choice that can be changed, and if it is
even valid on leon or only on the old sun machines.

There is a recurring discussion about eventually
killing off support for CONFIG_HIGHMEM in the kernel,
so if you have a hardware limit of 192MB of lowmem,
this would hit you particularly hard.

      Arnd

  reply	other threads:[~2024-03-06 16:22 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-24 17:42 [PATCH v2 0/7] sparc32: build fixes for all{yes,mod}config builds Sam Ravnborg via B4 Relay
2024-02-24 17:42 ` [PATCH v2 1/7] sparc32: Use generic cmpdi2/ucmpdi2 variants Sam Ravnborg via B4 Relay
2024-03-08 20:00   ` Andreas Larsson
2024-02-24 17:42 ` [PATCH v2 2/7] sparc32: Fix build with trapbase Sam Ravnborg via B4 Relay
2024-03-08 20:01   ` Andreas Larsson
2024-02-24 17:42 ` [PATCH v2 3/7] mtd: maps: sun_uflash: Declare uflash_devinit static Sam Ravnborg via B4 Relay
2024-02-26 10:23   ` Miquel Raynal
2024-03-08 20:02   ` Andreas Larsson
2024-02-24 17:42 ` [PATCH v2 4/7] sparc32: Do not select ZONE_DMA Sam Ravnborg via B4 Relay
2024-02-25  0:57   ` Maciej W. Rozycki
2024-02-25  7:08     ` Sam Ravnborg
2024-03-02 23:51   ` Randy Dunlap
2024-03-05 15:06   ` Andreas Larsson
2024-03-05 15:26     ` Arnd Bergmann
2024-03-06 14:19       ` Andreas Larsson
2024-03-06 14:45         ` Arnd Bergmann
2024-03-06 15:31           ` Andreas Larsson
2024-03-06 16:22             ` Arnd Bergmann [this message]
2024-03-06 18:19               ` Arnd Bergmann
2024-03-07 12:42                 ` Andreas Larsson
2024-03-07 13:06                   ` Arnd Bergmann
2024-03-06 15:04         ` Christoph Hellwig
2024-03-06 15:24           ` Arnd Bergmann
2024-02-24 17:42 ` [PATCH v2 5/7] sparc32: Do not select GENERIC_ISA_DMA Sam Ravnborg via B4 Relay
2024-03-08 20:03   ` Andreas Larsson
2024-03-09  9:04     ` Maciej W. Rozycki
2024-02-24 17:42 ` [PATCH v2 6/7] sparc32: Fix parport build with sparc32 Sam Ravnborg via B4 Relay
2024-03-02 23:52   ` Randy Dunlap
2024-03-08 20:04   ` Andreas Larsson
2024-03-09  9:06     ` Maciej W. Rozycki
2024-02-24 17:42 ` [PATCH v2 7/7] sparc32: Fix section mismatch in leon_pci_grpci Sam Ravnborg via B4 Relay
2024-03-02 23:54   ` Randy Dunlap
2024-03-05 15:06   ` Andreas Larsson
2024-03-07 18:20     ` Andreas Larsson
2024-03-07 20:16       ` Maciej W. Rozycki
2024-03-08  7:06         ` Andreas Larsson
2024-03-08 12:09           ` Maciej W. Rozycki
2024-03-08 22:08       ` Sam Ravnborg
2024-03-08 20:07   ` Andreas Larsson

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=001ba36a-9d4c-45c4-b1f2-448824848afc@app.fastmail.com \
    --to=arnd@arndb.de \
    --cc=andreas@gaisler.com \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-parport@lists.infradead.org \
    --cc=macro@orcam.me.uk \
    --cc=miquel.raynal@bootlin.com \
    --cc=rdunlap@infradead.org \
    --cc=sam@ravnborg.org \
    --cc=sparclinux@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).