static void homecache_finv_page_va(void* va, int home) { int cpu = get_cpu(); if (home == cpu) { finv_buffer_local(va, PAGE_SIZE); } else if (home == PAGE_HOME_HASH) { finv_buffer_remote(va, PAGE_SIZE, 1); } else { BUG_ON(home < 0 || home >= NR_CPUS); finv_buffer_remote(va, PAGE_SIZE, 0); } put_cpu(); }
void flush_remote_page(struct page *page, int order) { int i, pages = (1 << order); for (i = 0; i < pages; ++i, ++page) { void *p = kmap_atomic(page); int hfh = 0; int home = page_home(page); #if CHIP_HAS_CBOX_HOME_MAP() if (home == PAGE_HOME_HASH) hfh = 1; else #endif BUG_ON(home < 0 || home >= NR_CPUS); finv_buffer_remote(p, PAGE_SIZE, hfh); kunmap_atomic(p); } }