From: Niklas Cassel <cassel@kernel.org>
To: Damien Le Moal <dlemoal@kernel.org>
Cc: linux-ide@vger.kernel.org, Conrad Kostecki <conikost@gentoo.org>,
Szuying Chen <chensiying21@gmail.com>,
Jesse1_Chang@asmedia.com.tw, Richard_Hsu@asmedia.com.tw,
Chloe_Chen@asmedia.com.tw
Subject: Re: [PATCH] ata: ahci: Add mask_port_map module parameter
Date: Fri, 5 Apr 2024 14:45:33 +0200 [thread overview]
Message-ID: <Zg_ybd29wkA7w3Za@ryzen> (raw)
In-Reply-To: <9e016f41-8df3-458d-91df-f3795d3a4628@kernel.org>
On Fri, Apr 05, 2024 at 09:24:09PM +0900, Damien Le Moal wrote:
> On 4/5/24 17:44, Niklas Cassel wrote:
> >> +static char *ahci_mask_port_map;
> >> +module_param_named(mask_port_map, ahci_mask_port_map, charp, 0444);
> >> +MODULE_PARM_DESC(mask_port_map,
> >> + "Provide 32-bit port map masks to ignore controllers ports. "
> >> + "Valid values are: "
> >
> > Looking at other MODULE_PARM_DESC, it appears that you can use \n in the string.
> > So perhaps "Valid values are:\n"
> >
> >
> >> + "<mask> to apply the same mask to all controller devices, "
> >> + "<dev0_name>=<mask0>,<dev1_name>=<mask1>,...' to specify a "
> >
> > Perhaps add a \n after describing the first format.
>
> Yes, I saw that in many places the description string is split using "\n".
> However, with that, the print of the parameter description with "modinfo ahci"
> is rather weird, with the parameter type (charp) ending up on its own line. I
> did not like it so I did not add any "\n".
Ok.
>
> >> +static void ahci_apply_port_map_mask(struct device *dev,
> >> + struct ahci_host_priv *hpriv, char *mask_s)
> >> +{
> >> + unsigned int mask;
> >> +
> >> + if (kstrtouint(mask_s, 0, &mask)) {
> >> + dev_err(dev, "Invalid port map mask\n");
> >> + return;
> >> + }
> >> +
> >> + if (mask) {
> >> + dev_warn(dev, "Forcing port map mask 0x%x\n", mask);
> >> + hpriv->mask_port_map = mask;
> >
> > I think this should use saved_port_map instead of mask_port_map, see:
> > https://lore.kernel.org/linux-ide/uu2exwldqvbdjus6t4r3cxuto5jpeqtjfvc7qiikulfwiyntf3@j4btf2bt23ld/
> >
> > ""
> > 1. saved_port_map defines the ports actually available on the host
> > controller.
> > 2. mask_port_map masks out the unused ports if it's initialized,
> > otherwise all available ports will be initialized and utilized.
> > "">
> > (We don't want to initialize them at all.)
>
> Correct, and they do not. The masked ports are using the dummy ops. So it works
> exactly as intended. This module argument defines a *mask* for a port map, not
> the port map to use.
Ok, as long as there is no real initialization, there should be no extra time
spent during probing at boot, so using mask_port_map should be fine.
> The patch results in this:
>
> modrpobe ahci mask_port_map=0000:00:17.0=0x1
> dmesg | grep ahci
> ...
> ahci 0000:00:17.0: Forcing port map mask 0x1
> ahci 0000:00:17.0: masking port_map 0xff -> 0x1
> ahci 0000:00:17.0: AHCI vers 0001.0301, 32 command slots, 6 Gbps, SATA mode
> ahci 0000:00:17.0: (0000:00:17.0) 1/8 ports implemented (port mask 0x1)
>
> So I could remove the message I added I guess...
Right now, it does seem a bit redundant.
I guess we could change the print to be more like:
"overloading port map via kernel module param",
but I presume that we don't have any prints for other module params,
so I don't see why we should have one here, especially since we already
print that the mask is forced.
> I prefer that this module parameter defines a mask rather than a map as it is
> more general: it can be used for testing to override saved_port_map or masks
> already set for some controllers.
>
> > A mask of 0 is valid, so I don't think that you can do
>
> A mask of 0 would mean "no ports". So better off completely ignoring the
> controller for that case :) So no, I do not want that value to be valid.
Yes, and that is how it is defined in some controllers, see e.g.:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=566d1827df2e
So I don't see why we shouldn't allow that.
It would allow us to quickly "emulate" a controller with a port map that
is all zeroes. (Which apparently do exist in the wild.)
So it could be a quick way for us to test that the code correctly handles
such controllers.
Kind regards,
Niklas
prev parent reply other threads:[~2024-04-05 12:45 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-04 9:50 [PATCH] ata: ahci: Add mask_port_map module parameter Damien Le Moal
2024-04-05 8:44 ` Niklas Cassel
2024-04-05 12:24 ` Damien Le Moal
2024-04-05 12:45 ` Niklas Cassel [this message]
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=Zg_ybd29wkA7w3Za@ryzen \
--to=cassel@kernel.org \
--cc=Chloe_Chen@asmedia.com.tw \
--cc=Jesse1_Chang@asmedia.com.tw \
--cc=Richard_Hsu@asmedia.com.tw \
--cc=chensiying21@gmail.com \
--cc=conikost@gentoo.org \
--cc=dlemoal@kernel.org \
--cc=linux-ide@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