drm/bridge: analogix: fix edid not works
[firefly-linux-kernel-4.4.55.git] / mm / percpu-km.c
index df680855540a61264d27fbb041d274c5b6ca3d2a..10e3d0b8a86d1bbbd9749bccb9666d4251155450 100644 (file)
  *   chunk size is not aligned.  percpu-km code will whine about it.
  */
 
-#ifdef CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK
+#if defined(CONFIG_SMP) && defined(CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK)
 #error "contiguous percpu allocation is incompatible with paged first chunk"
 #endif
 
 #include <linux/log2.h>
 
-static int pcpu_populate_chunk(struct pcpu_chunk *chunk, int off, int size)
+static int pcpu_populate_chunk(struct pcpu_chunk *chunk,
+                              int page_start, int page_end)
 {
-       /* noop */
        return 0;
 }
 
-static void pcpu_depopulate_chunk(struct pcpu_chunk *chunk, int off, int size)
+static void pcpu_depopulate_chunk(struct pcpu_chunk *chunk,
+                                 int page_start, int page_end)
 {
        /* nada */
 }
@@ -66,6 +67,11 @@ static struct pcpu_chunk *pcpu_create_chunk(void)
 
        chunk->data = pages;
        chunk->base_addr = page_address(pages) - pcpu_group_offsets[0];
+
+       spin_lock_irq(&pcpu_lock);
+       pcpu_chunk_populated(chunk, 0, nr_pages);
+       spin_unlock_irq(&pcpu_lock);
+
        return chunk;
 }