int smm_setup_relocation_handler(struct smm_loader_params *params)
{
	void *smram = (void *)(SMM_DEFAULT_BASE);
	printk(BIOS_SPEW, "%s: enter\n", __func__);
	/* There can't be more than 1 concurrent save state for the relocation
	 * handler because all CPUs default to 0x30000 as SMBASE. */
	if (params->num_concurrent_save_states > 1)
		return -1;

	/* A handler has to be defined to call for relocation. */
	if (params->handler == NULL)
		return -1;

	/* Since the relocation handler always uses stack, adjust the number
	 * of concurrent stack users to be CONFIG_MAX_CPUS. */
	if (params->num_concurrent_stacks == 0)
		params->num_concurrent_stacks = CONFIG_MAX_CPUS;

	params->smm_main_entry_offset = SMM_ENTRY_OFFSET;
	params->smram_start = SMM_DEFAULT_BASE;
	params->smram_end = SMM_DEFAULT_BASE + SMM_DEFAULT_SIZE;
	return smm_module_setup_stub(smram, SMM_DEFAULT_SIZE,
				params, fxsave_area_relocation);
	printk(BIOS_SPEW, "%s: exit\n", __func__);
}
int smm_setup_relocation_handler(struct smm_loader_params *params)
{
	void *smram = (void *)(SMM_DEFAULT_BASE);
	printk(BIOS_SPEW, "%s: enter\n", __func__);
	 
	if (params->num_concurrent_save_states > 1)
		return -1;

	 
	if (params->handler == NULL)
		return -1;

	 
	if (params->num_concurrent_stacks == 0)
		params->num_concurrent_stacks = CONFIG_MAX_CPUS;

	params->smm_main_entry_offset = SMM_ENTRY_OFFSET;
	params->smram_start = SMM_DEFAULT_BASE;
	params->smram_end = SMM_DEFAULT_BASE + SMM_DEFAULT_SIZE;
	return smm_module_setup_stub(smram, SMM_DEFAULT_SIZE,
				params, fxsave_area_relocation);
	printk(BIOS_SPEW, "%s: exit\n", __func__);
}