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(a)linux.vnet.ibm.com>
> ---
> 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