Merge tag 'powerpc-6.9-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux

Pull powerpc fixes from Michael Ellerman:

- Fix incorrect delay handling in the plpks (keystore) code

- Fix a panic when an LPAR boots with a frozen PE

Thanks to Andrew Donnellan, Gaurav Batra, Nageswara R Sastry, and Nayna
Jain.

* tag 'powerpc-6.9-4' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux:
powerpc/pseries/iommu: LPAR panics during boot up with a frozen PE
powerpc/pseries: make max polling consistent for longer H_CALLs

+15 -8
+2 -3
arch/powerpc/include/asm/plpks.h
··· 44 #define PLPKS_MAX_DATA_SIZE 4000 45 46 // Timeouts for PLPKS operations 47 - #define PLPKS_MAX_TIMEOUT 5000 // msec 48 - #define PLPKS_FLUSH_SLEEP 10 // msec 49 - #define PLPKS_FLUSH_SLEEP_RANGE 400 50 51 struct plpks_var { 52 char *component;
··· 44 #define PLPKS_MAX_DATA_SIZE 4000 45 46 // Timeouts for PLPKS operations 47 + #define PLPKS_MAX_TIMEOUT (5 * USEC_PER_SEC) 48 + #define PLPKS_FLUSH_SLEEP 10000 // usec 49 50 struct plpks_var { 51 char *component;
+8
arch/powerpc/platforms/pseries/iommu.c
··· 786 * parent bus. During reboot, there will be ibm,dma-window property to 787 * define DMA window. For kdump, there will at least be default window or DDW 788 * or both. 789 */ 790 791 ppci = PCI_DN(pdn); 792
··· 786 * parent bus. During reboot, there will be ibm,dma-window property to 787 * define DMA window. For kdump, there will at least be default window or DDW 788 * or both. 789 + * There is an exception to the above. In case the PE goes into frozen 790 + * state, firmware may not provide ibm,dma-window property at the time 791 + * of LPAR boot up. 792 */ 793 + 794 + if (!pdn) { 795 + pr_debug(" no ibm,dma-window property !\n"); 796 + return; 797 + } 798 799 ppci = PCI_DN(pdn); 800
+5 -5
arch/powerpc/platforms/pseries/plpks.c
··· 415 break; 416 } 417 418 - usleep_range(PLPKS_FLUSH_SLEEP, 419 - PLPKS_FLUSH_SLEEP + PLPKS_FLUSH_SLEEP_RANGE); 420 timeout = timeout + PLPKS_FLUSH_SLEEP; 421 } while (timeout < PLPKS_MAX_TIMEOUT); 422 ··· 463 464 continuetoken = retbuf[0]; 465 if (pseries_status_to_err(rc) == -EBUSY) { 466 - int delay_ms = get_longbusy_msecs(rc); 467 - mdelay(delay_ms); 468 - timeout += delay_ms; 469 } 470 rc = pseries_status_to_err(rc); 471 } while (rc == -EBUSY && timeout < PLPKS_MAX_TIMEOUT);
··· 415 break; 416 } 417 418 + fsleep(PLPKS_FLUSH_SLEEP); 419 timeout = timeout + PLPKS_FLUSH_SLEEP; 420 } while (timeout < PLPKS_MAX_TIMEOUT); 421 ··· 464 465 continuetoken = retbuf[0]; 466 if (pseries_status_to_err(rc) == -EBUSY) { 467 + int delay_us = get_longbusy_msecs(rc) * 1000; 468 + 469 + fsleep(delay_us); 470 + timeout += delay_us; 471 } 472 rc = pseries_status_to_err(rc); 473 } while (rc == -EBUSY && timeout < PLPKS_MAX_TIMEOUT);