From 5d921e092f36799347cbd3e4212f40ee0f9cfa10 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Tue, 14 Jan 2025 13:01:19 +0100 Subject: [PATCH 01/13] fix: RTEMS error for foo=bar. --- testApp/pcitest.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/testApp/pcitest.c b/testApp/pcitest.c index d47bb0c..6ba37ca 100644 --- a/testApp/pcitest.c +++ b/testApp/pcitest.c @@ -97,11 +97,11 @@ static void findRootBridge(void) { testOk1(devPCIFindSpec(hostbridge, "slot=42", &dev2, 0)!=0); - testOk1(devPCIFindSpec(hostbridge, "foo", &dev2, 0)!=0); + //testOk1(devPCIFindSpec(hostbridge, "foo", &dev2, 0)!=0); } MAIN(pcitest) { - testPlan(25); + testPlan(24); devLibPCIRegisterBaseDefault(); devLibPCIUse(NULL); testDiag("Using driver: %s", devLibPCIDriverName()); From 5190c0a2fdcf238d691b7c127fcc64e9c78107a6 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Wed, 4 Jun 2025 10:40:00 +0200 Subject: [PATCH 02/13] fix: hotswap recovery added to isrThread. --- pciApp/os/Linux/devLibPCIOSD.c | 48 ++++++++++++++++++++++++++-------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/pciApp/os/Linux/devLibPCIOSD.c b/pciApp/os/Linux/devLibPCIOSD.c index be0010d..d4ca8bc 100644 --- a/pciApp/os/Linux/devLibPCIOSD.c +++ b/pciApp/os/Linux/devLibPCIOSD.c @@ -507,7 +507,7 @@ int linuxDevPCIInit(void) /* Read BAR info */ /* Base address */ - + filename = allocPrintf(BUSBASE "resource", osd->dev.domain, osd->dev.bus, osd->dev.device, osd->dev.function); if (!filename) { @@ -548,10 +548,10 @@ int linuxDevPCIInit(void) osd->displayErom = start; osd->eromlen = (start || stop ) ? (stop - start + 1) : 0; - + fclose(file); free(filename); - + /* driver name */ filename = allocPrintf(BUSBASE "driver", osd->dev.domain, osd->dev.bus, osd->dev.device, osd->dev.function); @@ -959,18 +959,44 @@ void isrThread(void* arg) epicsInterruptUnlock(isrflag); } - ret=read(osd->fd, &event, sizeof(event)); - if (ret==-1) { - switch(errno) { - case EINTR: /* interrupted by a signal */ + ret = read(osd->fd, &event, sizeof(event)); + if (ret == -1) { + switch (errno) { + case EINTR: + // benign, try again break; + + case EINVAL: + case ENODEV: + case EIO: + errlogPrintf("isrThread '%s': Detected device removal or invalid UIO descriptor (errno=%d: %s)\n", + name, errno, strerror(errno)); + errlogPrintf("isrThread '%s': Attempting to close and reopen /dev/uioX for recovery...\n", name); + + epicsMutexMustLock(osd->devLock); + close_uio(osd); + + if (open_uio(osd) == 0) { + errlogPrintf("isrThread '%s': Successfully reopened UIO device. Waiting for next interrupt...\n", name); + } else { + errlogPrintf("isrThread '%s': Failed to reopen UIO device. Device might not be reinserted yet. Retrying in 1 second...\n", name); + epicsMutexUnlock(osd->devLock); + epicsThreadSleep(1.0); + continue; + } + + epicsMutexUnlock(osd->devLock); + epicsThreadSleep(0.5); + continue; + default: - errlogPrintf("isrThread '%s' read error %d\n", - name,errno); + errlogPrintf("isrThread '%s': Unexpected read() error (errno=%d: %s). Sleeping and retrying...\n", + name, errno, strerror(errno)); epicsThreadSleep(0.5); } - } else - interrupted=1; + } else { + interrupted = 1; + } if (next!=event && next!=0) { errlogPrintf("isrThread '%s' missed %d events\n", From 30b92014ab267d647406ce696d2c9b5463071455 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Wed, 4 Jun 2025 11:08:12 +0200 Subject: [PATCH 03/13] feat: devlib2 version 2.13 release. --- configure/CONFIG_DEVLIB2_VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure/CONFIG_DEVLIB2_VERSION b/configure/CONFIG_DEVLIB2_VERSION index 4ae96e1..3cfb7da 100644 --- a/configure/CONFIG_DEVLIB2_VERSION +++ b/configure/CONFIG_DEVLIB2_VERSION @@ -1,2 +1,2 @@ DEVLIB2_MAJOR_VERSION = 2 -DEVLIB2_MINOR_VERSION = 12 +DEVLIB2_MINOR_VERSION = 13 From 03bad892056a78b7f2e31fa32139cf45d3585ed2 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Wed, 4 Jun 2025 12:26:02 +0200 Subject: [PATCH 04/13] fix: Handle reinserting seg fault. --- pciApp/os/Linux/devLibPCIOSD.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/pciApp/os/Linux/devLibPCIOSD.c b/pciApp/os/Linux/devLibPCIOSD.c index d4ca8bc..39a1cf9 100644 --- a/pciApp/os/Linux/devLibPCIOSD.c +++ b/pciApp/os/Linux/devLibPCIOSD.c @@ -963,23 +963,30 @@ void isrThread(void* arg) if (ret == -1) { switch (errno) { case EINTR: - // benign, try again break; + case EIO: case EINVAL: case ENODEV: - case EIO: - errlogPrintf("isrThread '%s': Detected device removal or invalid UIO descriptor (errno=%d: %s)\n", - name, errno, strerror(errno)); - errlogPrintf("isrThread '%s': Attempting to close and reopen /dev/uioX for recovery...\n", name); + errlogPrintf("isrThread '%s': Device removed or UIO invalid (errno=%d: %s)\n", name, errno, strerror(errno)); + errlogPrintf("isrThread '%s': Attempting to reopen /dev/uioX after hot-unplug...\n", name); epicsMutexMustLock(osd->devLock); - close_uio(osd); - if (open_uio(osd) == 0) { - errlogPrintf("isrThread '%s': Successfully reopened UIO device. Waiting for next interrupt...\n", name); + // Only attempt reopen if device appears + int uio = find_uio_number(osd); + if (uio >= 0) { + close_uio(osd); + if (open_uio(osd) == 0) { + errlogPrintf("isrThread '%s': Recovery successful — reopened /dev/uio%d\n", name, uio); + } else { + errlogPrintf("isrThread '%s': Failed to reopen /dev/uio%d\n", name, uio); + epicsMutexUnlock(osd->devLock); + epicsThreadSleep(1.0); + continue; + } } else { - errlogPrintf("isrThread '%s': Failed to reopen UIO device. Device might not be reinserted yet. Retrying in 1 second...\n", name); + errlogPrintf("isrThread '%s': UIO node not present yet, retrying in 1s...\n", name); epicsMutexUnlock(osd->devLock); epicsThreadSleep(1.0); continue; @@ -990,8 +997,7 @@ void isrThread(void* arg) continue; default: - errlogPrintf("isrThread '%s': Unexpected read() error (errno=%d: %s). Sleeping and retrying...\n", - name, errno, strerror(errno)); + errlogPrintf("isrThread '%s': Unexpected read error %d (%s), retrying...\n", name, errno, strerror(errno)); epicsThreadSleep(0.5); } } else { From 986874893ea09e90c2392cbd5422655921e7d325 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Wed, 4 Jun 2025 12:48:51 +0200 Subject: [PATCH 05/13] fix: Handling recovery (seg fault) after the reopen of the uio. --- pciApp/os/Linux/devLibPCIOSD.c | 45 +++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/pciApp/os/Linux/devLibPCIOSD.c b/pciApp/os/Linux/devLibPCIOSD.c index 39a1cf9..3ed97b4 100644 --- a/pciApp/os/Linux/devLibPCIOSD.c +++ b/pciApp/os/Linux/devLibPCIOSD.c @@ -922,6 +922,28 @@ int linuxDevPCIConnectInterrupt( return ret; } +static int reopen_uio(struct osdPCIDevice *osd) +{ + int uio = find_uio_number(osd); + if (uio < 0) + return -1; + + char *devname = allocPrintf("/dev/uio%u", uio); + if (!devname) + return -1; + + int newfd = open(devname, O_RDWR); + free(devname); + if (newfd < 0) + return -1; + + if (osd->fd != -1) + close(osd->fd); + + osd->fd = newfd; + return 0; +} + static void isrThread(void* arg) { @@ -969,41 +991,30 @@ void isrThread(void* arg) case EINVAL: case ENODEV: errlogPrintf("isrThread '%s': Device removed or UIO invalid (errno=%d: %s)\n", name, errno, strerror(errno)); - errlogPrintf("isrThread '%s': Attempting to reopen /dev/uioX after hot-unplug...\n", name); + errlogPrintf("isrThread '%s': Attempting hotplug recovery...\n", name); epicsMutexMustLock(osd->devLock); - - // Only attempt reopen if device appears - int uio = find_uio_number(osd); - if (uio >= 0) { - close_uio(osd); - if (open_uio(osd) == 0) { - errlogPrintf("isrThread '%s': Recovery successful — reopened /dev/uio%d\n", name, uio); - } else { - errlogPrintf("isrThread '%s': Failed to reopen /dev/uio%d\n", name, uio); - epicsMutexUnlock(osd->devLock); - epicsThreadSleep(1.0); - continue; - } + if (reopen_uio(osd) == 0) { + errlogPrintf("isrThread '%s': Successfully reopened UIO device\n", name); } else { - errlogPrintf("isrThread '%s': UIO node not present yet, retrying in 1s...\n", name); + errlogPrintf("isrThread '%s': UIO reopen failed. Will retry in 1 second.\n", name); epicsMutexUnlock(osd->devLock); epicsThreadSleep(1.0); continue; } - epicsMutexUnlock(osd->devLock); epicsThreadSleep(0.5); continue; default: - errlogPrintf("isrThread '%s': Unexpected read error %d (%s), retrying...\n", name, errno, strerror(errno)); + errlogPrintf("isrThread '%s': read error %d (%s)\n", name, errno, strerror(errno)); epicsThreadSleep(0.5); } } else { interrupted = 1; } + if (next!=event && next!=0) { errlogPrintf("isrThread '%s' missed %d events\n", name, event-next); From 41cdb4e26adb5e8ab06af41ccb652fbc52273c44 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Wed, 4 Jun 2025 14:35:08 +0200 Subject: [PATCH 06/13] refactor: Clean-up. --- .github/workflows/ci-scripts-build.yml | 2 +- pciApp/os/Linux/devLibPCIOSD.c | 10 +++------- testApp/pcitest.c | 4 ++-- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci-scripts-build.yml b/.github/workflows/ci-scripts-build.yml index 081ed56..4077a18 100644 --- a/.github/workflows/ci-scripts-build.yml +++ b/.github/workflows/ci-scripts-build.yml @@ -73,7 +73,7 @@ jobs: extra: "CMD_CXXFLAGS=-std=c++11" # It requires more debugging: - # - os: ubuntu-latest + # - os: ubuntu-22.04 # cmp: gcc # configuration: default # base: "7.0" diff --git a/pciApp/os/Linux/devLibPCIOSD.c b/pciApp/os/Linux/devLibPCIOSD.c index 3ed97b4..20281ed 100644 --- a/pciApp/os/Linux/devLibPCIOSD.c +++ b/pciApp/os/Linux/devLibPCIOSD.c @@ -991,24 +991,20 @@ void isrThread(void* arg) case EINVAL: case ENODEV: errlogPrintf("isrThread '%s': Device removed or UIO invalid (errno=%d: %s)\n", name, errno, strerror(errno)); - errlogPrintf("isrThread '%s': Attempting hotplug recovery...\n", name); epicsMutexMustLock(osd->devLock); if (reopen_uio(osd) == 0) { errlogPrintf("isrThread '%s': Successfully reopened UIO device\n", name); } else { - errlogPrintf("isrThread '%s': UIO reopen failed. Will retry in 1 second.\n", name); - epicsMutexUnlock(osd->devLock); - epicsThreadSleep(1.0); - continue; + errlogPrintf("isrThread '%s': UIO reopen failed. Will retry.\n", name); } epicsMutexUnlock(osd->devLock); - epicsThreadSleep(0.5); + epicsThreadSleep(1); continue; default: errlogPrintf("isrThread '%s': read error %d (%s)\n", name, errno, strerror(errno)); - epicsThreadSleep(0.5); + epicsThreadSleep(1); } } else { interrupted = 1; diff --git a/testApp/pcitest.c b/testApp/pcitest.c index 6ba37ca..d47bb0c 100644 --- a/testApp/pcitest.c +++ b/testApp/pcitest.c @@ -97,11 +97,11 @@ static void findRootBridge(void) { testOk1(devPCIFindSpec(hostbridge, "slot=42", &dev2, 0)!=0); - //testOk1(devPCIFindSpec(hostbridge, "foo", &dev2, 0)!=0); + testOk1(devPCIFindSpec(hostbridge, "foo", &dev2, 0)!=0); } MAIN(pcitest) { - testPlan(24); + testPlan(25); devLibPCIRegisterBaseDefault(); devLibPCIUse(NULL); testDiag("Using driver: %s", devLibPCIDriverName()); From af827e5edf5d0b56a498979a20bf308427015930 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Mon, 9 Jun 2025 17:20:38 +0200 Subject: [PATCH 07/13] feat: Add optional hot-swap hook for PCI device reopening. --- pciApp/devLibPCI.h | 10 ++++++++++ pciApp/os/Linux/devLibPCIOSD.c | 3 +++ 2 files changed, 13 insertions(+) diff --git a/pciApp/devLibPCI.h b/pciApp/devLibPCI.h index bbd50c7..ef0b849 100644 --- a/pciApp/devLibPCI.h +++ b/pciApp/devLibPCI.h @@ -451,6 +451,16 @@ int devPCIDisableInterrupt(const epicsPCIDevice *dev); epicsShareFunc const char* devPCIDeviceClassToString(int classId); +/** + * @brief Optional callback invoked on PCI device hot-swap. + * + * This function pointer may be set to a custom handler that will be called + * when a PCI device is successfully reopened (e.g. after hot-swap). + * + * @param name Identifier or name of the reopened PCI device. + */ +epicsShareExtern void (*devPCIonHotSwapHook)(const char*); + #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/pciApp/os/Linux/devLibPCIOSD.c b/pciApp/os/Linux/devLibPCIOSD.c index 20281ed..73db6bf 100644 --- a/pciApp/os/Linux/devLibPCIOSD.c +++ b/pciApp/os/Linux/devLibPCIOSD.c @@ -944,6 +944,8 @@ static int reopen_uio(struct osdPCIDevice *osd) return 0; } +epicsShareDef void (*devPCIonHotSwapHook)(const char* name) = NULL; + static void isrThread(void* arg) { @@ -995,6 +997,7 @@ void isrThread(void* arg) epicsMutexMustLock(osd->devLock); if (reopen_uio(osd) == 0) { errlogPrintf("isrThread '%s': Successfully reopened UIO device\n", name); + if (devPCIonHotSwapHook) devPCIonHotSwapHook(name); } else { errlogPrintf("isrThread '%s': UIO reopen failed. Will retry.\n", name); } From 1c185068f40a0791b01c6627b8f293c7c83fd23e Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Tue, 10 Jun 2025 09:36:27 +0200 Subject: [PATCH 08/13] fix: onHotSwap callback per-device - upgrade. --- pciApp/devLibPCI.h | 10 ---------- pciApp/os/Linux/devLibPCIOSD.c | 7 ++++--- 2 files changed, 4 insertions(+), 13 deletions(-) diff --git a/pciApp/devLibPCI.h b/pciApp/devLibPCI.h index ef0b849..bbd50c7 100644 --- a/pciApp/devLibPCI.h +++ b/pciApp/devLibPCI.h @@ -451,16 +451,6 @@ int devPCIDisableInterrupt(const epicsPCIDevice *dev); epicsShareFunc const char* devPCIDeviceClassToString(int classId); -/** - * @brief Optional callback invoked on PCI device hot-swap. - * - * This function pointer may be set to a custom handler that will be called - * when a PCI device is successfully reopened (e.g. after hot-swap). - * - * @param name Identifier or name of the reopened PCI device. - */ -epicsShareExtern void (*devPCIonHotSwapHook)(const char*); - #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/pciApp/os/Linux/devLibPCIOSD.c b/pciApp/os/Linux/devLibPCIOSD.c index 73db6bf..e996a63 100644 --- a/pciApp/os/Linux/devLibPCIOSD.c +++ b/pciApp/os/Linux/devLibPCIOSD.c @@ -104,6 +104,9 @@ struct osdPCIDevice { epicsMutexId devLock; /* guard access to isrs list */ + //Optional callback invoked on PCI device hot-swap. + void (*onHotSwapHook)(struct osdPCIDevice* dev); + ELLNODE node; ELLLIST isrs; /* contains struct osdISR */ @@ -944,8 +947,6 @@ static int reopen_uio(struct osdPCIDevice *osd) return 0; } -epicsShareDef void (*devPCIonHotSwapHook)(const char* name) = NULL; - static void isrThread(void* arg) { @@ -997,7 +998,7 @@ void isrThread(void* arg) epicsMutexMustLock(osd->devLock); if (reopen_uio(osd) == 0) { errlogPrintf("isrThread '%s': Successfully reopened UIO device\n", name); - if (devPCIonHotSwapHook) devPCIonHotSwapHook(name); + if (osd->onHotSwapHook) osd->onHotSwapHook(osd); } else { errlogPrintf("isrThread '%s': UIO reopen failed. Will retry.\n", name); } From 5fc7c89354a80d4285ce8844d7cc8f7a6851eb98 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Tue, 10 Jun 2025 13:29:15 +0200 Subject: [PATCH 09/13] feat: Split PCI OSD declarations into devLibPCIOSD.h --- pciApp/Makefile | 2 +- pciApp/os/Linux/devLibPCIOSD.c | 36 ++---------------------- pciApp/os/Linux/devLibPCIOSD.h | 50 ++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 34 deletions(-) create mode 100644 pciApp/os/Linux/devLibPCIOSD.h diff --git a/pciApp/Makefile b/pciApp/Makefile index 41d101f..7b1ae88 100644 --- a/pciApp/Makefile +++ b/pciApp/Makefile @@ -20,6 +20,7 @@ DBD += epicspci.dbd INC += devLibPCI.h INC += devLibPCIImpl.h +INC += devLibPCIOSD.h epicspci_SRCS += devLibPCI.c epicspci_SRCS += devLibPCIStrings.c @@ -37,4 +38,3 @@ epicspci_LIBS += Com include $(TOP)/configure/RULES #---------------------------------------- # ADD RULES AFTER THIS LINE - diff --git a/pciApp/os/Linux/devLibPCIOSD.c b/pciApp/os/Linux/devLibPCIOSD.c index e996a63..efd688d 100644 --- a/pciApp/os/Linux/devLibPCIOSD.c +++ b/pciApp/os/Linux/devLibPCIOSD.c @@ -22,13 +22,13 @@ #include #include #include -#include +//#include #include #include #include - -#include "devLibPCIImpl.h" +//#include "devLibPCIImpl.h" +#include "devLibPCIOSD.h" /**@file devLibPCIOSD.c * @brief Userspace PCI access in Linux @@ -82,36 +82,6 @@ * * Access after init is guarded by devLock */ -struct osdPCIDevice { - epicsPCIDevice dev; /* "public" data */ - - /* result of mmap(), add offset before passing to user */ - volatile void *base[PCIBARCOUNT]; - /* offset from start of page to start of BAR */ - epicsUInt32 offset[PCIBARCOUNT]; - /* BAR length (w/o offset) */ - epicsUInt32 len[PCIBARCOUNT]; - volatile void *erom; - epicsUInt32 eromlen; - - epicsUInt32 displayBAR[PCIBARCOUNT]; /* Raw PCI address */ - epicsUInt32 displayErom; - - int fd; /* /dev/uio# */ - int cfd; /* config-space descriptor */ - int rfd[PCIBARCOUNT]; - int cmode; /* config-space mode */ - - epicsMutexId devLock; /* guard access to isrs list */ - - //Optional callback invoked on PCI device hot-swap. - void (*onHotSwapHook)(struct osdPCIDevice* dev); - - ELLNODE node; - - ELLLIST isrs; /* contains struct osdISR */ -}; -typedef struct osdPCIDevice osdPCIDevice; #define dev2osd(dev) CONTAINER(dev, osdPCIDevice, dev) diff --git a/pciApp/os/Linux/devLibPCIOSD.h b/pciApp/os/Linux/devLibPCIOSD.h new file mode 100644 index 0000000..d668bdb --- /dev/null +++ b/pciApp/os/Linux/devLibPCIOSD.h @@ -0,0 +1,50 @@ + +#ifndef DEVLIBPCIOSD_H_INC +#define DEVLIBPCIOSD_H_INC + +#include + +#include "devLibPCIImpl.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +struct osdPCIDevice +{ + epicsPCIDevice dev; /* "public" data */ + + /* result of mmap(), add offset before passing to user */ + volatile void* base[PCIBARCOUNT]; + /* offset from start of page to start of BAR */ + epicsUInt32 offset[PCIBARCOUNT]; + /* BAR length (w/o offset) */ + epicsUInt32 len[PCIBARCOUNT]; + volatile void* erom; + epicsUInt32 eromlen; + + epicsUInt32 displayBAR[PCIBARCOUNT]; /* Raw PCI address */ + epicsUInt32 displayErom; + + int fd; /* /dev/uio# */ + int cfd; /* config-space descriptor */ + int rfd[PCIBARCOUNT]; + int cmode; /* config-space mode */ + + epicsMutexId devLock; /* guard access to isrs list */ + + /* Optional callback invoked on PCI device hot-swap.*/ + void (*onHotSwapHook)(struct osdPCIDevice*); + + ELLNODE node; + + ELLLIST isrs; /* contains struct osdISR */ +}; +typedef struct osdPCIDevice osdPCIDevice; + +#ifdef __cplusplus +} +#endif + +#endif /* DEVLIBPCIOSD_H_INC */ From 25862cfd28a744c7fd124c36f6fc14a821e57dd6 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Fri, 13 Jun 2025 13:44:12 +0200 Subject: [PATCH 10/13] rollback: EINTR comment. --- pciApp/os/Linux/devLibPCIOSD.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pciApp/os/Linux/devLibPCIOSD.c b/pciApp/os/Linux/devLibPCIOSD.c index efd688d..3937fb0 100644 --- a/pciApp/os/Linux/devLibPCIOSD.c +++ b/pciApp/os/Linux/devLibPCIOSD.c @@ -957,7 +957,7 @@ void isrThread(void* arg) ret = read(osd->fd, &event, sizeof(event)); if (ret == -1) { switch (errno) { - case EINTR: + case EINTR: /* interrupted by a signal */ break; case EIO: From 4e77f9d72d691cf62e63502f91267acd71e44109 Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Mon, 23 Jun 2025 10:36:07 +0200 Subject: [PATCH 11/13] refactor: Clean-up. --- pciApp/os/Linux/devLibPCIOSD.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/pciApp/os/Linux/devLibPCIOSD.c b/pciApp/os/Linux/devLibPCIOSD.c index 3937fb0..1f138a6 100644 --- a/pciApp/os/Linux/devLibPCIOSD.c +++ b/pciApp/os/Linux/devLibPCIOSD.c @@ -22,12 +22,10 @@ #include #include #include -//#include #include #include #include -//#include "devLibPCIImpl.h" #include "devLibPCIOSD.h" /**@file devLibPCIOSD.c From 7cbb0a30b87d8f6f3a2765cacc577498f8eb2ddb Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Mon, 23 Jun 2025 10:52:18 +0200 Subject: [PATCH 12/13] docs: License added to devLibPCIOSD.h file. --- pciApp/os/Linux/devLibPCIOSD.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pciApp/os/Linux/devLibPCIOSD.h b/pciApp/os/Linux/devLibPCIOSD.h index d668bdb..dfbe566 100644 --- a/pciApp/os/Linux/devLibPCIOSD.h +++ b/pciApp/os/Linux/devLibPCIOSD.h @@ -1,3 +1,9 @@ +/*************************************************************************\ +* Copyright (c) 2010 Brookhaven Science Associates, as Operator of +* Brookhaven National Laboratory. +* devLib2 is distributed subject to a Software License Agreement found +* in file LICENSE that is included with this distribution. +\*************************************************************************/ #ifndef DEVLIBPCIOSD_H_INC #define DEVLIBPCIOSD_H_INC From cc2af2e5ece49a02401c8e092d3623f0e52ae1df Mon Sep 17 00:00:00 2001 From: Jerzy Jamroz Date: Fri, 27 Jun 2025 13:19:28 +0200 Subject: [PATCH 13/13] fix: rebase .ci issue --- .github/workflows/ci-scripts-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-scripts-build.yml b/.github/workflows/ci-scripts-build.yml index 4077a18..081ed56 100644 --- a/.github/workflows/ci-scripts-build.yml +++ b/.github/workflows/ci-scripts-build.yml @@ -73,7 +73,7 @@ jobs: extra: "CMD_CXXFLAGS=-std=c++11" # It requires more debugging: - # - os: ubuntu-22.04 + # - os: ubuntu-latest # cmp: gcc # configuration: default # base: "7.0"