Re: [PATCH] scatterlist: add a warning if sg_virt() is used on highmempages

From: Sebastian Andrzej Siewior
Date: Thu Dec 06 2012 - 03:47:42 EST


On 12/05/2012 10:46 PM, Andrew Morton wrote:
--- a/include/linux/scatterlist.h
+++ b/include/linux/scatterlist.h
@@ -198,6 +198,9 @@ static inline dma_addr_t sg_phys(struct scatterlist *sg)
**/
static inline void *sg_virt(struct scatterlist *sg)
{
+#ifdef CONFIG_DEBUG_SG
+ WARN_ON(PageHighMem(sg_page(sg)));
+#endif
return page_address(sg_page(sg)) + sg->offset;
}

Why won't it work? page_address() will search the kmap table and will
search for the page. If the caller had previously kmapped that page,
all is well. If the caller has failed to kmap the page, sg_virt() will
return a nearly-null pointer and presumably someone will later go oops.

I missed that it will work for previously mapped page. If you think
that an oops later is enough then okay, I drop this.

Sebastian
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/