From fd26292cbf1c4b0dee9e8bae0d3eb3af89f90edd Mon Sep 17 00:00:00 2001 From: Andriy Moroz Date: Tue, 9 Apr 2019 13:55:18 +0300 Subject: [PATCH 1/2] Improve eeprom access reliability Signed-off-by: Andriy Moroz --- .../x86_64-mlnx_msn2700-r0/plugins/eeprom.py | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py index 3650d9c8b70b..50304e696415 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py @@ -17,16 +17,37 @@ import warnings import os import sys + import syslog from sonic_eeprom import eeprom_base from sonic_eeprom import eeprom_tlvinfo import subprocess except ImportError, e: raise ImportError (str(e) + "- required module not found") +SYSLOG_IDENTIFIER = "eeprom.py" +EEPROM_SYMLINK = "/bsp/eeprom/sys_eeprom" +CACHE_FILE = "/var/cache/sonic/decode-syseeprom/syseeprom_cache" + +def log_error(msg): + syslog.openlog(SYSLOG_IDENTIFIER) + syslog.syslog(syslog.LOG_ERR, msg) + syslog.closelog() + class board(eeprom_tlvinfo.TlvInfoDecoder): _TLV_INFO_MAX_LEN = 256 + RETRIES = 5 def __init__(self, name, path, cpld_root, ro): - self.eeprom_path = "/bsp/eeprom/sys_eeprom" + for attempt in range(self.RETRIES): + if not os.path.islink(EEPROM_SYMLINK): + time.sleep(1) + else: + break + + if not (os.path.exists(EEPROM_SYMLINK) or os.path.isfile(CACHE_FILE)): + log_error("Nowhere to read syseeprom from! No symlink or cache file found") + raise RuntimeError("No syseeprom symlink or cache file found") + + self.eeprom_path = EEPROM_SYMLINK super(board, self).__init__(self.eeprom_path, 0, '', True) From 23c0f1101856fd74c2bb69d3d8e3cb7dfb281a01 Mon Sep 17 00:00:00 2001 From: Qi Luo Date: Wed, 10 Apr 2019 14:25:42 +0300 Subject: [PATCH 2/2] Update device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py Co-Authored-By: andriymoroz-mlnx --- device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py index 50304e696415..108bf5f4f65f 100644 --- a/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py +++ b/device/mellanox/x86_64-mlnx_msn2700-r0/plugins/eeprom.py @@ -40,7 +40,7 @@ class board(eeprom_tlvinfo.TlvInfoDecoder): def __init__(self, name, path, cpld_root, ro): for attempt in range(self.RETRIES): - if not os.path.islink(EEPROM_SYMLINK): + if not (os.path.exists(EEPROM_SYMLINK) or os.path.isfile(CACHE_FILE)): time.sleep(1) else: break