struct processor_pminfo *pmpt;
struct processor_performance *pxpt;
+ if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_PX) )
+ {
+ ret = -ENOSYS;
+ break;
+ }
if ( cpuid < 0 )
{
ret = -EINVAL;
memcpy ((void *)&pxpt->status_register,
(void *)&xenpxpt->status_register,
sizeof(struct xen_pct_register));
+ pxpt->init |= XEN_PX_PCT;
}
if ( xenpxpt->flags & XEN_PX_PSS )
{
break;
}
pxpt->state_count = xenpxpt->state_count;
+ pxpt->init |= XEN_PX_PSS;
}
if ( xenpxpt->flags & XEN_PX_PSD )
{
memcpy ((void *)&pxpt->domain_info,
(void *)&xenpxpt->domain_info,
sizeof(struct xen_psd_package));
+ pxpt->init |= XEN_PX_PSD;
}
if ( xenpxpt->flags & XEN_PX_PPC )
+ {
pxpt->ppc = xenpxpt->ppc;
+ pxpt->init |= XEN_PX_PPC;
+ }
- if ( xenpxpt->flags == ( XEN_PX_PCT | XEN_PX_PSS |
- XEN_PX_PSD | XEN_PX_PPC ) )
+ if ( pxpt->init == ( XEN_PX_PCT | XEN_PX_PSS |
+ XEN_PX_PSD | XEN_PX_PPC ) )
{
- pxpt->init =1;
+ pxpt->init |= 0x80000000;
cpu_count++;
}
if ( cpu_count == num_online_cpus() )
}
case XEN_PM_CX:
+ if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_CX) )
+ {
+ ret = -ENOSYS;
+ break;
+ }
ret = set_cx_pminfo(op->u.set_pminfo.id, &op->u.set_pminfo.power);
break;
case XEN_PM_TX:
+ if ( !(xen_processor_pmbits & XEN_PROCESSOR_PM_TX) )
+ {
+ ret = -ENOSYS;
+ break;
+ }
ret = -EINVAL;
break;