Re: [PATCH RFC 31/35] crypto: remove nth_page() usage within SG entry
David Hildenbrand <[email protected]>
| Newsgroups | com.zx2c4.lists.wireguard,dev.linux.lists.iommu,dev.linux.lists.virtualization,org.freedesktop.lists.dri-devel,org.freedesktop.lists.intel-gfx,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-riscv,org.kernel.vger.io-uring,org.kernel.vger.kvm,org.kernel.vger.linux-crypto,org.kernel.vger.linux-ide,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kernel.vger.linux-mips,org.kernel.vger.linux-mmc,org.kernel.vger.linux-s390,org.kernel.vger.linux-scsi,org.kernel.vger.netdev,org.kvack.linux-mm |
|---|---|
| Message-ID | <[email protected]> |
On 21.08.25 22:24, Linus Torvalds wrote: > On Thu, 21 Aug 2025 at 16:08, David Hildenbrand <[email protected]> wrote: >> >> - page = nth_page(page, offset >> PAGE_SHIFT); >> + page += offset / PAGE_SIZE; > > Please keep the " >> PAGE_SHIFT" form. No strong opinion. I was primarily doing it to get rid of (in other cases) the parentheses. Like in patch #29 - /* Assumption: contiguous pages can be accessed as "page + i" */ - page = nth_page(sg_page(sg), (*offset >> PAGE_SHIFT)); + page = sg_page(sg) + *offset / PAGE_SIZE; > > Is "offset" unsigned? Yes it is, But I had to look at the source code > to make sure, because it wasn't locally obvious from the patch. And > I'd rather we keep a pattern that is "safe", in that it doesn't > generate strange code if the value might be a 's64' (eg loff_t) on > 32-bit architectures. > > Because doing a 64-bit shift on x86-32 is like three cycles. Doing a > 64-bit signed division by a simple constant is something like ten > strange instructions even if the end result is only 32-bit. I would have thought that the compiler is smart enough to optimize that? PAGE_SIZE is a constant. > > And again - not the case *here*, but just a general "let's keep to one > pattern", and the shift pattern is simply the better choice. It's a wild mixture, but I can keep doing what we already do in these cases. -- Cheers David / dhildenb