[...] > > > + > > > + while (s < nr_subbufs && p < nr_pages) { > > > + struct page *page = virt_to_page(cpu_buffer->subbuf_ids[s]); > > > + int off = 0; > > > + > > > + for (; off < (1 << (subbuf_order)); off++, page++) { > > > + if (p >= nr_pages) > > > + break; > > > + > > > + pages[p++] = page; > > > + } > > > + s++; > > > + } > > > > The above can be made to: > > > > while (p < nr_pages) { > > struct page *page; > > int off = 0; > > > > if (WARN_ON_ONCE(s >= nr_subbufs)) > > break; > > I'm not particularly happy about us calling vm_insert_pages with NULL > pointers stored in pages. > > Should we instead do > > if (WARN_ON_ONCE(s >= nr_subbufs)) { > err = -EINVAL; > goto out; > } > > ? I could also nr_pages = p in the event of s >= nr_subbufs... but that really that shouldn't happen so let's return an error. > > -- > Cheers, > > David / dhildenb >