sonic-buildimage/device/celestica/x86_64-cel_seastone-r0/sonic_platform
Ikki Zhu db12b8c9c0
dx010 fix possible cpld race read issue (#15339)
#### Why I did it
fix possible cpld race read issue between watchdog and reboot cause process

##### Work item tracking
- Microsoft ADO **(number only)**:

#### How I did it
Use flock to limit parallel access to cpld sys file

#### How to verify it
It can be simulate and verified with following python script

```python3
import signal
import subprocess
import threading

exit_flag = False

def run_command(cmd):
    status = True
    result = ""
    try:
        p = subprocess.Popen(
            cmd, shell=True, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        raw_data, err = p.communicate()
        if err == '':
            result = raw_data.strip()
    except:
        status = False
    return status, result

def get_cpld_reg_value(getreg_path, register):
    #cmd = "echo {1} > {0}; cat {0}".format(getreg_path, register)
    cmd = "flock {0} -c 'echo {1} > {0}; cat {0}'".format(getreg_path,
register)
    status, result = run_command(cmd)
    return result if status else None

def cpld_read(thread_num, cpld_reg):
    while not exit_flag:
        val
= get_cpld_reg_value("/sys/devices/platform/dx010_cpld/getreg",
cpld_reg)
        print(f"Thread {thread_num}: get cpld reg {cpld_reg}, value
{val}")

def signal_handler(sig, frame):
    global exit_flag
    print("Ctrl+C detected. Quitting...")
    exit_flag = True

if __name__ == '__main__':
    # Register the signal handler for Ctrl+C
    signal.signal(signal.SIGINT, signal_handler)

    t1 = threading.Thread(target=cpld_read, args=(1, '0x103',))
    t2 = threading.Thread(target=cpld_read, args=(2, '0x141',))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
```
2023-06-20 16:21:08 -07:00
..
__init__.py [sonic-utilities] Update submodule; Build and install as a Python 3 wheel (#5926) 2020-11-25 10:28:36 -08:00
chassis.py [DX010 platform] fix dx010 platform testcase issues (#13595) 2023-02-16 17:52:12 +00:00
component.py dx010 fix possible cpld race read issue (#15339) 2023-06-20 16:21:08 -07:00
eeprom.py [DX010 platform] fix dx010 platform testcase issues (#13595) 2023-02-16 17:52:12 +00:00
event.py [device/celestica]: Add xcvrd event support for Seastone-DX010 (#5896) 2020-12-14 10:22:56 -08:00
fan_drawer.py [Celestica DX010] fix fan drawer and watchdog platform testcase issues (#13426) 2023-02-08 04:59:20 +00:00
fan.py [device/celestica]: Fix failed test cases of DX010 platform APIs (#6564) 2021-04-05 14:02:41 -07:00
helper.py dx010 fix possible cpld race read issue (#15339) 2023-06-20 16:21:08 -07:00
platform.py [sonic-utilities] Update submodule; Build and install as a Python 3 wheel (#5926) 2020-11-25 10:28:36 -08:00
psu.py [Celestica Seastone] fix multi sonic platform issues (#13356) 2023-01-19 19:18:21 +00:00
sfp.py [Seastone] fix dx010 qsfp eeprom data write issue (#13930) 2023-03-02 20:06:09 +00:00
thermal_actions.py [device/celestica]: Add thermalctld support on DX010 platform APIs (#6089) 2021-01-19 01:09:54 -08:00
thermal_conditions.py [device/celestica]: Add thermalctld support on DX010 platform APIs (#6089) 2021-01-19 01:09:54 -08:00
thermal_infos.py [device/celestica]: Add thermalctld support on DX010 platform APIs (#6089) 2021-01-19 01:09:54 -08:00
thermal_manager.py [device/celestica]: Add thermalctld support on DX010 platform APIs (#6089) 2021-01-19 01:09:54 -08:00
thermal.py [device/celestica]:Fix failed test case of Seastone snmp (#11430) 2022-07-27 23:28:11 +00:00
watchdog.py [Celestica DX010] fix fan drawer and watchdog platform testcase issues (#13426) 2023-02-08 04:59:20 +00:00