Per-CPU PFN cache makes perfect sense. Only one page invalidation on cache fill, no locking whatsoever.