@@ -160,19 +160,24 @@ public override string GetReport() {
160160 CultureInfo . InvariantCulture ) ) ;
161161 r . AppendLine ( ) ;
162162
163- r . AppendLine ( "SMN Registers" ) ;
164- r . AppendLine ( ) ;
165- r . AppendLine ( " Register Value" ) ;
166- var registers = GetSmnRegisters ( ) ;
167- for ( int i = 0 ; i < registers . Count ; i ++ )
168- if ( ReadSmnRegister ( registers [ i ] , out uint value ) ) {
169- r . Append ( " " ) ;
170- r . Append ( registers [ i ] . ToString ( "X8" , CultureInfo . InvariantCulture ) ) ;
171- r . Append ( " " ) ;
172- r . Append ( value . ToString ( "X8" , CultureInfo . InvariantCulture ) ) ;
173- r . AppendLine ( ) ;
174- }
175- r . AppendLine ( ) ;
163+ if ( Ring0 . WaitPciBusMutex ( 100 ) ) {
164+ r . AppendLine ( "SMN Registers" ) ;
165+ r . AppendLine ( ) ;
166+ r . AppendLine ( " Register Value" ) ;
167+ var registers = GetSmnRegisters ( ) ;
168+
169+ for ( int i = 0 ; i < registers . Count ; i ++ )
170+ if ( ReadSmnRegister ( registers [ i ] , out uint value ) ) {
171+ r . Append ( " " ) ;
172+ r . Append ( registers [ i ] . ToString ( "X8" , CultureInfo . InvariantCulture ) ) ;
173+ r . Append ( " " ) ;
174+ r . Append ( value . ToString ( "X8" , CultureInfo . InvariantCulture ) ) ;
175+ r . AppendLine ( ) ;
176+ }
177+ r . AppendLine ( ) ;
178+
179+ Ring0 . ReleasePciBusMutex ( ) ;
180+ }
176181
177182 return r . ToString ( ) ;
178183 }
@@ -195,52 +200,57 @@ private bool ReadSmnRegister(uint address, out uint value) {
195200 public override void Update ( ) {
196201 base . Update ( ) ;
197202
198- uint value ;
199- if ( ReadSmnRegister ( FAMILY_17H_M01H_THM_TCON_TEMP , out value ) ) {
200- float temperature = ( ( value >> 21 ) & 0x7FF ) / 8.0f ;
201- if ( ( value & FAMILY_17H_M01H_THM_TCON_TEMP_RANGE_SEL ) != 0 )
202- temperature -= 49 ;
203+ if ( Ring0 . WaitPciBusMutex ( 10 ) ) {
203204
204- if ( tctlTemperature != null ) {
205- tctlTemperature . Value = temperature +
206- tctlTemperature . Parameters [ 0 ] . Value ;
207- ActivateSensor ( tctlTemperature ) ;
208- }
205+ uint value ;
206+ if ( ReadSmnRegister ( FAMILY_17H_M01H_THM_TCON_TEMP , out value ) ) {
207+ float temperature = ( ( value >> 21 ) & 0x7FF ) / 8.0f ;
208+ if ( ( value & FAMILY_17H_M01H_THM_TCON_TEMP_RANGE_SEL ) != 0 )
209+ temperature -= 49 ;
209210
210- temperature -= tctlOffset ;
211+ if ( tctlTemperature != null ) {
212+ tctlTemperature . Value = temperature +
213+ tctlTemperature . Parameters [ 0 ] . Value ;
214+ ActivateSensor ( tctlTemperature ) ;
215+ }
211216
212- coreTemperature . Value = temperature +
213- coreTemperature . Parameters [ 0 ] . Value ;
214- ActivateSensor ( coreTemperature ) ;
215- }
217+ temperature -= tctlOffset ;
218+
219+ coreTemperature . Value = temperature +
220+ coreTemperature . Parameters [ 0 ] . Value ;
221+ ActivateSensor ( coreTemperature ) ;
222+ }
216223
217- float maxTemperature = float . MinValue ;
218- int ccdCount = 0 ;
219- float ccdTemperatureSum = 0 ;
220- for ( uint i = 0 ; i < ccdTemperatures . Length ; i ++ ) {
221- if ( ReadSmnRegister ( FAMILY_17H_M70H_CCD_TEMP ( i ) , out value ) ) {
222- if ( ( value & FAMILY_17H_M70H_CCD_TEMP_VALID ) == 0 )
223- continue ;
224+ float maxTemperature = float . MinValue ;
225+ int ccdCount = 0 ;
226+ float ccdTemperatureSum = 0 ;
227+ for ( uint i = 0 ; i < ccdTemperatures . Length ; i ++ ) {
228+ if ( ReadSmnRegister ( FAMILY_17H_M70H_CCD_TEMP ( i ) , out value ) ) {
229+ if ( ( value & FAMILY_17H_M70H_CCD_TEMP_VALID ) == 0 )
230+ continue ;
224231
225- float temperature = ( value & 0x7FF ) / 8.0f - 49 ;
226- temperature += ccdTemperatures [ i ] . Parameters [ 0 ] . Value ;
232+ float temperature = ( value & 0x7FF ) / 8.0f - 49 ;
233+ temperature += ccdTemperatures [ i ] . Parameters [ 0 ] . Value ;
227234
228- if ( temperature > maxTemperature )
229- maxTemperature = temperature ;
230- ccdCount ++ ;
231- ccdTemperatureSum += temperature ;
235+ if ( temperature > maxTemperature )
236+ maxTemperature = temperature ;
237+ ccdCount ++ ;
238+ ccdTemperatureSum += temperature ;
232239
233- ccdTemperatures [ i ] . Value = temperature ;
234- ActivateSensor ( ccdTemperatures [ i ] ) ;
240+ ccdTemperatures [ i ] . Value = temperature ;
241+ ActivateSensor ( ccdTemperatures [ i ] ) ;
242+ }
235243 }
236- }
237244
238- if ( ccdCount > 1 ) {
239- ccdMaxTemperature . Value = maxTemperature ;
240- ActivateSensor ( ccdMaxTemperature ) ;
245+ if ( ccdCount > 1 ) {
246+ ccdMaxTemperature . Value = maxTemperature ;
247+ ActivateSensor ( ccdMaxTemperature ) ;
248+
249+ ccdAvgTemperature . Value = ccdTemperatureSum / ccdCount ;
250+ ActivateSensor ( ccdAvgTemperature ) ;
251+ }
241252
242- ccdAvgTemperature . Value = ccdTemperatureSum / ccdCount ;
243- ActivateSensor ( ccdAvgTemperature ) ;
253+ Ring0 . ReleasePciBusMutex ( ) ;
244254 }
245255
246256 if ( energyUnitMultiplier != 0 &&
0 commit comments