@ -40,6 +40,8 @@ struct err_log_info {
# define NVRAM_MAX_REQ 2079
# define NVRAM_MIN_REQ 1055
# define NVRAM_LOG_PART_NAME "ibm,rtas-log"
static ssize_t pSeries_nvram_read ( char * buf , size_t count , loff_t * index )
{
unsigned int i ;
@ -262,8 +264,8 @@ int nvram_clear_error_log(void)
* error logs and cleanup partitions if needed .
*
* The general strategy is the following :
* 1. ) If there is ppc64 , linux partition large enough then use it .
* 2. ) If there is not a ppc64 , linux partition large enough , search
* 1. ) If there is log partition large enough then use it .
* 2. ) If there is none large enough , search
* for a free partition that is large enough .
* 3. ) If there is not a free partition large enough remove
* _all_ OS partitions and consolidate the space .
@ -281,34 +283,35 @@ static int __init pseries_nvram_init_log_partition(void)
nvram_scan_partitions ( ) ;
/* Lookg for ours */
p = nvram_find_partition ( " ppc64,linux " , NVRAM_SIG_OS , & size ) ;
p = nvram_find_partition ( NVRAM_LOG_PART_NAME , NVRAM_SIG_OS , & size ) ;
/* Found one but too small, remove it */
if ( p & & size < NVRAM_MIN_REQ ) {
pr_info ( " nvram: Found too small ppc64,linux partition "
pr_info ( " nvram: Found too small " NVRAM_LOG_PART_NAME " partition "
" ,removing it... " ) ;
nvram_remove_partition ( " ppc64,linux " , NVRAM_SIG_OS ) ;
nvram_remove_partition ( NVRAM_LOG_PART_NAME , NVRAM_SIG_OS ) ;
p = 0 ;
}
/* Create one if we didn't find */
if ( ! p ) {
p = nvram_create_partition ( " ppc64,linux " , NVRAM_SIG_OS ,
p = nvram_create_partition ( NVRAM_LOG_PART_NAME , NVRAM_SIG_OS ,
NVRAM_MAX_REQ , NVRAM_MIN_REQ ) ;
/* No room for it, try to get rid of any OS partition
* and try again
*/
if ( p = = - ENOSPC ) {
pr_info ( " nvram: No room to create ppc64,linux "
pr_info ( " nvram: No room to create " NVRAM_LOG_PART_NAME
" partition, deleting all OS partitions... " ) ;
nvram_remove_partition ( NULL , NVRAM_SIG_OS ) ;
p = nvram_create_partition ( " ppc64,linux " , NVRAM_SIG_OS ,
NVRAM_MAX_REQ , NVRAM_MIN_REQ ) ;
p = nvram_create_partition ( NVRAM_LOG_PART_NAME ,
NVRAM_SIG_OS , NVRAM_MAX_REQ ,
NVRAM_MIN_REQ ) ;
}
}
if ( p < = 0 ) {
pr_err ( " nvram: Failed to find or create ppc64,linux "
pr_err ( " nvram: Failed to find or create " NVRAM_LOG_PART_NAME
" partition, err %d \n " , ( int ) p ) ;
return 0 ;
}