unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
        long rc;
 
-       rc = plpar_hcall(H_INT_GET_SOURCE_INFO, retbuf, flags, lisn);
+       do {
+               rc = plpar_hcall(H_INT_GET_SOURCE_INFO, retbuf, flags, lisn);
+       } while (plpar_busy_delay(rc));
+
        if (rc) {
                pr_err("H_INT_GET_SOURCE_INFO lisn=%ld failed %ld\n", lisn, rc);
                return rc;
                flags, lisn, target, prio, sw_irq);
 
 
-       rc = plpar_hcall_norets(H_INT_SET_SOURCE_CONFIG, flags, lisn,
-                               target, prio, sw_irq);
+       do {
+               rc = plpar_hcall_norets(H_INT_SET_SOURCE_CONFIG, flags, lisn,
+                                       target, prio, sw_irq);
+       } while (plpar_busy_delay(rc));
+
        if (rc) {
                pr_err("H_INT_SET_SOURCE_CONFIG lisn=%ld target=%lx prio=%lx failed %ld\n",
                       lisn, target, prio, rc);
        unsigned long retbuf[PLPAR_HCALL_BUFSIZE];
        long rc;
 
-       rc = plpar_hcall(H_INT_GET_QUEUE_INFO, retbuf, flags, target, priority);
+       do {
+               rc = plpar_hcall(H_INT_GET_QUEUE_INFO, retbuf, flags, target,
+                                priority);
+       } while (plpar_busy_delay(rc));
+
        if (rc) {
                pr_err("H_INT_GET_QUEUE_INFO cpu=%ld prio=%ld failed %ld\n",
                       target, priority, rc);
        pr_devel("H_INT_SET_QUEUE_CONFIG flags=%lx target=%lx priority=%lx qpage=%lx qsize=%lx\n",
                flags,  target, priority, qpage, qsize);
 
-       rc = plpar_hcall_norets(H_INT_SET_QUEUE_CONFIG, flags, target,
-                               priority, qpage, qsize);
+       do {
+               rc = plpar_hcall_norets(H_INT_SET_QUEUE_CONFIG, flags, target,
+                                       priority, qpage, qsize);
+       } while (plpar_busy_delay(rc));
+
        if (rc) {
                pr_err("H_INT_SET_QUEUE_CONFIG cpu=%ld prio=%ld qpage=%lx returned %ld\n",
                       target, priority, qpage, rc);
 {
        long rc;
 
-       rc = plpar_hcall_norets(H_INT_SYNC, flags, lisn);
+       do {
+               rc = plpar_hcall_norets(H_INT_SYNC, flags, lisn);
+       } while (plpar_busy_delay(rc));
+
        if (rc) {
                pr_err("H_INT_SYNC lisn=%ld returned %ld\n", lisn, rc);
                return  rc;
        pr_devel("H_INT_ESB flags=%lx lisn=%lx offset=%lx in=%lx\n",
                flags,  lisn, offset, in_data);
 
-       rc = plpar_hcall(H_INT_ESB, retbuf, flags, lisn, offset, in_data);
+       do {
+               rc = plpar_hcall(H_INT_ESB, retbuf, flags, lisn, offset,
+                                in_data);
+       } while (plpar_busy_delay(rc));
+
        if (rc) {
                pr_err("H_INT_ESB lisn=%ld offset=%ld returned %ld\n",
                       lisn, offset, rc);