> > > static int __init > > > +setup_io_tlb_segsize(char *str) > > > +{ > > > + get_option(&str, &io_tlb_segsize); > > > + return 0; > > > +} > > > +__setup("io_tlb_segsize=", setup_io_tlb_segsize); > > > > This should be folded in swiotlb=XYZ parsing please. > > > I am not very clear about this comment. > 1, Do you mean it should use early_param instead of __setup? > As I known early_param can't help to assign the parameter that we changed at > kernel cmdline because we have the default value here. > int io_tlb_segsize = 128; > unsigned long io_tlb_default_size = (64UL<<20); The code in 'setup_io_tlb_npages' - which is run when 'swiotlb=' parameter is passed on the command line, can be modified to parse other extra values. That is what I meant. As in right now it assumes you want only to change the size of the IOTLB buffer (64MB default). You can make the code be smarter and accept two values, say: 32768,128 Which should make the size by the default of 64MB with an io_tlb_segsize of 128. Or you can do: 32768,256 for also an 64MB with a io_tlb_segsize of 256 instead. This offers users to manipulate these values as well as the initial arch code which can modify 'io_tlb_nslabs' and 'io_tlb_segsize' during bootup to their preferred values. > 2, Or do you mean use iotlbsegsize instead of io_tlb_segsize? No. Just fold it all under 'swiotlb' parameter please. > > > Also you will need to update the Documentaiton/kernel-parameters.txt file. And naturally that will have to be updated.