First, thanks for following up on the fedora bugs so quickly! On 11/17/2015 10:46 AM, Stefan Berger wrote: > 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. > I see you sent a qemu patch for a similar change. What's the benefit of libvirt setting cancel_path if qemu can (and already attempts to) figure it out? - Cole > Signed-off-by: Stefan Berger <stefanb@xxxxxxxxxxxxxxxxxx> > --- > src/util/virtpm.c | 22 ++++++++++++++++++++-- > tests/qemuxml2argvmock.c | 15 +++++++++++++++ > 2 files changed, 35 insertions(+), 2 deletions(-) > > diff --git a/src/util/virtpm.c b/src/util/virtpm.c > index 88f8361..3872a31 100644 > --- a/src/util/virtpm.c > +++ b/src/util/virtpm.c > @@ -23,9 +23,12 @@ > #include <config.h> > > #include <sys/stat.h> > +#include <fcntl.h> > > #include "virstring.h" > #include "virerror.h" > +#include "viralloc.h" > +#include "virfile.h" > #include "virtpm.h" > > #define VIR_FROM_THIS VIR_FROM_NONE > @@ -41,13 +44,28 @@ virTPMCreateCancelPath(const char *devpath) > { > char *path = NULL; > const char *dev; > + const char *prefix[] = {"misc/", "tpm/"}; > + size_t i; > + int fd; > > if (devpath) { > dev = strrchr(devpath, '/'); > if (dev) { > dev++; > - if (virAsprintf(&path, "/sys/class/misc/%s/device/cancel", > - dev) < 0) > + for (i = 0; i < ARRAY_CARDINALITY(prefix); i++) { > + if (virAsprintf(&path, "/sys/class/%s%s/device/cancel", > + prefix[i], dev) < 0) > + goto cleanup; > + > + fd = open(path, O_WRONLY); > + if (fd >= 0) { > + VIR_FORCE_CLOSE(fd); > + break; > + } > + VIR_FREE(path); > + } > + /* /dev/null does not allow to cancel cmds but it can be used */ > + if (!path && virAsprintf(&path, "/dev/null") < 0) > goto cleanup; > } else { > virReportError(VIR_ERR_INTERNAL_ERROR, > 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; > +} > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list