@@ -114,34 +114,70 @@ struct RULER_ST Ruler = {
114
114
Ruler.TopOf = (struct TOPOF) { .Top = _cpu , .Boost = _boost} \
115
115
)
116
116
117
+ void LowestOfRuler (unsigned int cpu , enum RATIO_BOOST rb , unsigned int * lowest )
118
+ {
119
+ if (RO (Shm )-> Cpu [cpu ].Boost [rb ] < RO (Shm )-> Cpu [Ruler .Top [rb ]].Boost [rb ])
120
+ {
121
+ Ruler .Top [rb ] = cpu ;
122
+ }
123
+ if (RO (Shm )-> Cpu [cpu ].Boost [rb ] < (* lowest ))
124
+ {
125
+ (* lowest ) = RO (Shm )-> Cpu [cpu ].Boost [rb ];
126
+ SetTopOfRuler (Ruler .Top [rb ], rb );
127
+ }
128
+ }
129
+
130
+ void HighestOfRuler (unsigned int cpu , enum RATIO_BOOST rb ,unsigned int * highest )
131
+ {
132
+ if (RO (Shm )-> Cpu [cpu ].Boost [rb ] > RO (Shm )-> Cpu [Ruler .Top [rb ]].Boost [rb ])
133
+ {
134
+ Ruler .Top [rb ] = cpu ;
135
+ }
136
+ if (RO (Shm )-> Cpu [cpu ].Boost [rb ] > (* highest ))
137
+ {
138
+ (* highest ) = RO (Shm )-> Cpu [cpu ].Boost [rb ];
139
+ SetTopOfRuler (Ruler .Top [rb ], rb );
140
+ }
141
+ }
142
+
117
143
void SetTopOftheTop ( unsigned int cpu , enum RATIO_BOOST rb ,
118
144
unsigned int * lowest , unsigned int * highest )
119
145
{
120
- switch (rb ) {
121
- case BOOST (HWP_MIN ):
122
- case BOOST (MIN ):
123
- if (RO (Shm )-> Cpu [cpu ].Boost [rb ] < RO (Shm )-> Cpu [ Ruler .Top [rb ] ].Boost [rb ])
124
- {
125
- Ruler .Top [rb ] = cpu ;
126
- }
127
- if (RO (Shm )-> Cpu [cpu ].Boost [rb ] < (* lowest ))
128
- {
129
- (* lowest ) = RO (Shm )-> Cpu [cpu ].Boost [rb ];
130
- SetTopOfRuler (Ruler .Top [rb ], rb );
131
- }
132
- break ;
133
- default :
134
- if (RO (Shm )-> Cpu [cpu ].Boost [rb ] > RO (Shm )-> Cpu [ Ruler .Top [rb ] ].Boost [rb ])
135
- {
136
- Ruler .Top [rb ] = cpu ;
137
- }
138
- if (RO (Shm )-> Cpu [cpu ].Boost [rb ] > (* highest ))
139
- {
140
- (* highest ) = RO (Shm )-> Cpu [cpu ].Boost [rb ];
141
- SetTopOfRuler (Ruler .Top [rb ], rb );
142
- }
143
- break ;
144
- }
146
+ switch (rb ) {
147
+ case BOOST (HWP_MIN ):
148
+ if ((RO (Shm )-> Proc .Features .HWP_Enable == 1 )
149
+ || (RO (Shm )-> Proc .Features .ACPI_CPPC == 1 ))
150
+ {
151
+ LowestOfRuler (cpu , rb , lowest );
152
+ }
153
+ break ;
154
+ case BOOST (MIN ):
155
+ LowestOfRuler (cpu , rb , lowest );
156
+ break ;
157
+ case BOOST (TGT ):
158
+ if ((RO (Shm )-> Proc .Features .HWP_Enable == 0 )
159
+ && (RO (Shm )-> Proc .Features .ACPI_CPPC == 0 ))
160
+ {
161
+ HighestOfRuler (cpu , rb , highest );
162
+ }
163
+ break ;
164
+ case BOOST (HWP_MAX ) ... BOOST (HWP_TGT ):
165
+ if ((RO (Shm )-> Proc .Features .HWP_Enable == 1 )
166
+ || (RO (Shm )-> Proc .Features .ACPI_CPPC == 1 ))
167
+ {
168
+ HighestOfRuler (cpu , rb , highest );
169
+ }
170
+ break ;
171
+ case BOOST (18 C ) ... BOOST (1 C ):
172
+ if (RO (Shm )-> Proc .Features .Turbo_OPP == 1 )
173
+ {
174
+ HighestOfRuler (cpu , rb , highest );
175
+ }
176
+ break ;
177
+ default :
178
+ HighestOfRuler (cpu , rb , highest );
179
+ break ;
180
+ }
145
181
}
146
182
147
183
void InsertionSortRuler (unsigned int base [],
@@ -170,11 +206,15 @@ void AggregateRatio(void)
170
206
unsigned int , RO (Shm )-> Proc .Features .Factory .Clock .Hz
171
207
);
172
208
enum RATIO_BOOST lt , rt , min_boost = BOOST (MIN );
173
- if ((RO (Shm )-> Cpu [RO (Shm )-> Proc .Service .Core ].Boost [BOOST (HWP_MIN )] > 0 )
174
- && (RO (Shm )-> Cpu [RO (Shm )-> Proc .Service .Core ].Boost [BOOST (HWP_MIN )]
175
- < RO (Shm )-> Cpu [RO (Shm )-> Proc .Service .Core ].Boost [BOOST (MIN )]))
176
- {
177
- min_boost = BOOST (HWP_MIN );
209
+
210
+ if ((RO (Shm )-> Proc .Features .HWP_Enable == 1 )
211
+ || (RO (Shm )-> Proc .Features .ACPI_CPPC == 1 )) {
212
+ if ((RO (Shm )-> Cpu [RO (Shm )-> Proc .Service .Core ].Boost [BOOST (HWP_MIN )] > 0 )
213
+ && (RO (Shm )-> Cpu [RO (Shm )-> Proc .Service .Core ].Boost [BOOST (HWP_MIN )]
214
+ < RO (Shm )-> Cpu [RO (Shm )-> Proc .Service .Core ].Boost [BOOST (MIN )]))
215
+ {
216
+ min_boost = BOOST (HWP_MIN );
217
+ }
178
218
}
179
219
unsigned int cpu ,
180
220
lowest = RO (Shm )-> Cpu [RO (Shm )-> Proc .Service .Core ].Boost [BOOST (MAX )],
0 commit comments