On 11/17/2015 08:14 PM, Cole Robinson wrote: > On 11/17/2015 07:44 PM, Stefan Berger wrote: >> This patch addresses BZ 1244895. >> >> Adapt the sysfs TPM command cancel path for the TPM driver that >> does not use a miscdevice anymore since Linux 4.0. Support old >> and new paths and check their availability. >> >> Add a mockup for the test cases to avoid the testing for >> availability of the cancel path. >> >> Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxxxxxxxxxx> >> --- >> src/util/virtpm.c | 21 ++++++++++++++++++--- >> tests/qemuxml2argvmock.c | 15 +++++++++++++++ >> 2 files changed, 33 insertions(+), 3 deletions(-) >> >> diff --git a/src/util/virtpm.c b/src/util/virtpm.c >> index 88f8361..6d9b065 100644 >> --- a/src/util/virtpm.c >> +++ b/src/util/virtpm.c >> @@ -26,6 +26,8 @@ >> >> #include "virstring.h" >> #include "virerror.h" >> +#include "viralloc.h" >> +#include "virfile.h" >> #include "virtpm.h" >> >> #define VIR_FROM_THIS VIR_FROM_NONE >> @@ -41,14 +43,27 @@ virTPMCreateCancelPath(const char *devpath) >> { >> char *path = NULL; >> const char *dev; >> + const char *prefix[] = {"misc/", "tpm/"}; >> + size_t i; >> >> if (devpath) { >> dev = strrchr(devpath, '/'); >> if (dev) { >> dev++; >> - if (virAsprintf(&path, "/sys/class/misc/%s/device/cancel", >> - dev) < 0) >> - goto cleanup; >> + for (i = 0; i < ARRAY_CARDINALITY(prefix); i++) { >> + if (virAsprintf(&path, "/sys/class/%s%s/device/cancel", >> + prefix[i], dev) < 0) >> + goto cleanup; >> + >> + if (virFileExists(path)) >> + break; >> + >> + VIR_FREE(path); >> + } >> + if (!path) >> + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", >> + _("No usable sysfs TPM cancel file could be " >> + "found")); >> } else { >> virReportError(VIR_ERR_INTERNAL_ERROR, >> _("TPM device path %s is invalid"), devpath); >> diff --git a/tests/qemuxml2argvmock.c b/tests/qemuxml2argvmock.c >> index d24725e..e58b8ce 100644 >> --- a/tests/qemuxml2argvmock.c >> +++ b/tests/qemuxml2argvmock.c >> @@ -24,9 +24,13 @@ >> #include "virnuma.h" >> #include "virmock.h" >> #include "virutil.h" >> +#include "virstring.h" >> +#include "virtpm.h" >> #include <time.h> >> #include <unistd.h> >> >> +#define VIR_FROM_THIS VIR_FROM_NONE >> + >> long virGetSystemPageSize(void) >> { >> return 4096; >> @@ -59,3 +63,14 @@ virNumaNodeIsAvailable(int node) >> return node >= 0 && node <= virNumaGetMaxNode(); >> } >> #endif /* WITH_NUMACTL && HAVE_NUMA_BITMASK_ISBITSET */ >> + >> +char * >> +virTPMCreateCancelPath(const char *devpath) >> +{ >> + char *path; >> + (void)devpath; >> + >> + ignore_value(VIR_STRDUP(path, "/sys/class/misc/tpm0/device/cancel")); >> + >> + return path; >> +} >> > > ACK > Pushed now Thanks, Cole -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list