#include <linux/delay.h>
 #include <linux/hardirq.h>
 #include <linux/workqueue.h>
+#include <linux/ratelimit.h>
 
 #include <xen/xen.h>
 #include <xen/interface/xen.h>
        cur = nr_grant_frames;
        extra = ((req_entries + (grefs_per_grant_frame-1)) /
                 grefs_per_grant_frame);
-       if (cur + extra > gnttab_max_grant_frames())
+       if (cur + extra > gnttab_max_grant_frames()) {
+               pr_warn_ratelimited("xen/grant-table: max_grant_frames reached"
+                                   " cur=%u extra=%u limit=%u"
+                                   " gnttab_free_count=%u req_entries=%u\n",
+                                   cur, extra, gnttab_max_grant_frames(),
+                                   gnttab_free_count, req_entries);
                return -ENOSPC;
+       }
 
        rc = gnttab_map(cur, cur + extra - 1);
        if (rc == 0)