if (p->state != FBINFO_STATE_RUNNING)
                return;
 
+       if (p->flags & FBINFO_VIRTFB)
+               fb_warn_once(p, "Framebuffer is not in I/O address space.");
+
        /* if the beginning of the target area might overlap with the end of
        the source area, be have to copy the area reverse. */
        if ((dy == sy && dx > sx) || (dy > sy)) {
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
+       if (p->flags & FBINFO_VIRTFB)
+               fb_warn_once(p, "Framebuffer is not in I/O address space.");
+
        if (p->fix.visual == FB_VISUAL_TRUECOLOR ||
            p->fix.visual == FB_VISUAL_DIRECTCOLOR )
                fg = ((u32 *) (p->pseudo_palette))[rect->color];
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
+       if (p->flags & FBINFO_VIRTFB)
+               fb_warn_once(p, "Framebuffer is not in I/O address space.");
+
        bitstart = (dy * p->fix.line_length * 8) + (dx * bpp);
        start_index = bitstart & (32 - 1);
        pitch_index = (p->fix.line_length & (bpl - 1)) * 8;
 
        int c, cnt = 0, err = 0;
        unsigned long total_size, trailing;
 
+       if (info->flags & FBINFO_VIRTFB)
+               fb_warn_once(info, "Framebuffer is not in I/O address space.");
+
        if (!info->screen_base)
                return -ENODEV;
 
        int c, cnt = 0, err = 0;
        unsigned long total_size, trailing;
 
+       if (info->flags & FBINFO_VIRTFB)
+               fb_warn_once(info, "Framebuffer is not in I/O address space.");
+
        if (!info->screen_base)
                return -ENODEV;
 
        u32 len = info->fix.smem_len;
        unsigned long mmio_pgoff = PAGE_ALIGN((start & ~PAGE_MASK) + len) >> PAGE_SHIFT;
 
+       if (info->flags & FBINFO_VIRTFB)
+               fb_warn_once(info, "Framebuffer is not in I/O address space.");
+
        /*
         * This can be either the framebuffer mapping, or if pgoff points
         * past it, the mmio mapping.
 
        unsigned long total_size, c;
        ssize_t ret;
 
+       if (!(info->flags & FBINFO_VIRTFB))
+               fb_warn_once(info, "Framebuffer is not in virtual address space.");
+
        if (!info->screen_buffer)
                return -ENODEV;
 
        unsigned long total_size, c;
        size_t ret;
 
+       if (!(info->flags & FBINFO_VIRTFB))
+               fb_warn_once(info, "Framebuffer is not in virtual address space.");
+
        if (!info->screen_buffer)
                return -ENODEV;
 
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
+       if (!(p->flags & FBINFO_VIRTFB))
+               fb_warn_once(p, "Framebuffer is not in virtual address space.");
+
        /* if the beginning of the target area might overlap with the end of
        the source area, be have to copy the area reverse. */
        if ((dy == sy && dx > sx) || (dy > sy)) {
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
+       if (!(p->flags & FBINFO_VIRTFB))
+               fb_warn_once(p, "Framebuffer is not in virtual address space.");
+
        if (p->fix.visual == FB_VISUAL_TRUECOLOR ||
            p->fix.visual == FB_VISUAL_DIRECTCOLOR )
                fg = ((u32 *) (p->pseudo_palette))[rect->color];
 
        if (p->state != FBINFO_STATE_RUNNING)
                return;
 
+       if (!(p->flags & FBINFO_VIRTFB))
+               fb_warn_once(p, "Framebuffer is not in virtual address space.");
+
        bitstart = (dy * p->fix.line_length * 8) + (dx * bpp);
        start_index = bitstart & (32 - 1);
        pitch_index = (p->fix.line_length & (bpl - 1)) * 8;
 
 }
 #endif
 
-/* Convenience logging macros */
+/*
+ * Convenience logging macros
+ */
+
 #define fb_err(fb_info, fmt, ...)                                      \
        pr_err("fb%d: " fmt, (fb_info)->node, ##__VA_ARGS__)
 #define fb_notice(info, fmt, ...)                                      \
 #define fb_dbg(fb_info, fmt, ...)                                      \
        pr_debug("fb%d: " fmt, (fb_info)->node, ##__VA_ARGS__)
 
+#define fb_warn_once(fb_info, fmt, ...)                                        \
+       pr_warn_once("fb%d: " fmt, (fb_info)->node, ##__VA_ARGS__)
+
 #endif /* _LINUX_FB_H */