Messages in this thread | | | From | "Wang, Xiaoming" <> | Subject | RE: [PATCH v5] modify the IO_TLB_SEGSIZE and IO_TLB_DEFAULT_SIZE configurable as flexible requirement about SW-IOMMU. | Date | Fri, 6 Mar 2015 01:12:48 +0000 |
| |
Dear Jan
> -----Original Message----- > From: Jan Beulich [mailto:JBeulich@suse.com] > Sent: Thursday, March 5, 2015 5:00 PM > To: Wang, Xiaoming > Cc: Liu@aserp2030.oracle.com; Zhang@aserp2030.oracle.com; chris@chris- > wilson.co.uk; david.vrabel@citrix.com; lauraa@codeaurora.org; > heiko.carstens@de.ibm.com; linux@horizon.com; Liu, Chuansheng; Zhang, > Dongxing; takahiro.akashi@linaro.org; akpm@linux-foundation.org; linux- > mips@linux-mips.org; ralf@linux-mips.org; xen-devel@lists.xenproject.org; > boris.ostrovsky@oracle.com; Konrad RzeszutekWilk; > d.kasatkin@samsung.com; pebolle@tiscali.nl; linux-kernel@vger.kernel.org > Subject: RE: [PATCH v5] modify the IO_TLB_SEGSIZE and > IO_TLB_DEFAULT_SIZE configurable as flexible requirement about SW- > IOMMU. > > >>> On 05.03.15 at 09:52, <xiaoming.wang@intel.com> wrote: > >> From: Jan Beulich [mailto:JBeulich@suse.com] > >> Sent: Thursday, March 5, 2015 4:40 PM > >> >>> On 05.03.15 at 04:53, <xiaoming.wang@intel.com> wrote: > >> >> From: Konrad Rzeszutek Wilk [mailto:konrad.wilk@oracle.com] > >> >> Sent: Thursday, March 5, 2015 3:43 AM On Tue, Mar 03, 2015 at > >> >> 04:11:09PM +0800, Wang Xiaoming wrote: > >> >> > @@ -101,13 +119,32 @@ setup_io_tlb_npages(char *str) { > >> >> > if (isdigit(*str)) { > >> >> > io_tlb_nslabs = simple_strtoul(str, &str, 0); > >> >> > - /* avoid tail segment of size < IO_TLB_SEGSIZE */ > >> >> > - io_tlb_nslabs = ALIGN(io_tlb_nslabs, > IO_TLB_SEGSIZE); > >> >> > } > >> >> > if (*str == ',') > >> >> > ++str; > >> >> > - if (!strcmp(str, "force")) > >> >> > + if (!strncmp(str, "force", 5)) { > >> >> > swiotlb_force = 1; > >> >> > + str += 5; > >> >> > + } > >> >> > >> >> So the format is now: > >> >> > >> >> Format: { <int> | force | <int> | <int>} > >> >> > >> >> which means I can do > >> >> 32,22323,force > >> >> > >> >> Or > >> >> force,32 > >> >> > >> >> Or > >> >> 32,force > >> >> > >> > If I use Format: { <int>,force,<int>,<int>} 32,22323,force can't > >> > acceptable. > >> > There are three <int> here, if there are out of order, that will > >> > cause confuse. > >> > Only 32,force,32323 > >> > Or 32,,32323,2322 > >> > Or ,,323222,3232 > >> > Are available. > >> > >> You need to make sure that all previously valid variants are still > >> usable, > > i.e. > >> force alone, a number alone, force,<number> and <number>,force. How > >> many variants you want to support with your additions is mostly up to > >> you; I'd recommend permitting force in any position. > >> > > I don't think it's suitable to accept that "force" in any position. > > If we defined Format: { <int>,force,<int>,<int>} "force" must be > > located in second position. > > And we add comment for each <int> also. > > Every position may be defined specifically. > > As said, with the old format allowing force in either first or second position, > you have to at least accept that in the new version too. > Accepting force in any position would be a (desirable) courtesy to the user. > I have checked the code and do some test.
First "|" in Format means *or* in Documentation/kernel-parameters.txt For example: acpi= [HW,ACPI,X86] Advanced Configuration and Power Interface Format: { force | off | strict | noirq | rsdt }
acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode Format: { level | edge | high | low }
Second the code in lib/swiotlb.c can't realize the function that "force" in either first or second position with the Format swiotlb= [ARM,IA-64,PPC,MIPS,X86] Format: { <int> | force } <int> -- Number of I/O TLB slabs
I test with parameter BOARD_KERNEL_CMDLINE += swiotlb=force,500 The result is io_tlb_nslabs=32768, swiotlb_force=0x0, io_tlb_nslabs=32768 because that if io_tlb_nslabs can't get from early_param("swiotlb", setup_io_tlb_npages); It will be valued at swiotlb_init with default. So both "<int>" and "force" can't recognized with original code below.
static int __init setup_io_tlb_npages(char *str) { if (isdigit(*str)) { io_tlb_nslabs = simple_strtoul(str, &str, 0); /* avoid tail segment of size < IO_TLB_SEGSIZE */ io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE); } if (*str == ',') ++str; if (!strcmp(str, "force")) swiotlb_force = 1;
return 0; } early_param("swiotlb", setup_io_tlb_npages);
So we can't use Format: { <int> | force | <int> | <int>} any more as there are four parameters. Format: { <int>,force,<int>,<int>} is suitable I think. And fixing "force" is follow the code design previously in setup_io_tlb_npages.
> Jan
| |