Machine queue, 2019-03-11

* memfd fixes (Ilya Maximets)
 * Move nvdimms state into struct MachineState (Eric Auger)
 * hostmem-file: reject invalid pmem file sizes (Stefan Hajnoczi)
 -----BEGIN PGP SIGNATURE-----
 
 iQIcBAABCAAGBQJchwQFAAoJECgHk2+YTcWmhkMP/iyHjvM7eTXcbs+5xidkQpX8
 mc9ElHmX/W2ZK1TUeopz2hUuOG12qkt3G4bOKEKgD07h/O5J7HPXSRvT1TU7UbA/
 ZkNQiF/TpuyB8JtxIgbYtgh4ZDFIGFy5o/phjCEuejyHMxZXVL8PNKCm9ZUPKgfG
 XYH1Q7Y+uHH7qQDhLRPdfs5/v8hOKdmHK/SuUn/dq2CqA4GoNjnC9IfxnuvIpDU6
 F2Hj2YhPC35zFgR3bIh2Fqz4qv37u50a1L4VPKaCQpPY5YNGj6jPaOVPQbMrviFI
 1/yaNr5RGdNrS7aQLcDKKVeclSuFHC7x3uo27JF1RbP8p4tAQi0M89E/RLyBV5lY
 Y7a9fInmJbxJQifgct6dv8yzTiNoniX5yph81RMXk0CzV74sP+yeKkwkIK2dWAsn
 2zsM6qCHFvIv3F7iIy+ONl6TJ/RALvyP4F3Vhd3lT2Y+nwnQOvUdrX6eL4yeYGfZ
 4OPCEHIn+xhb3ApYbG+4OrDBYZrPVpr6yYcqc8Ob9paeR08DgaghDX3E23bASwSl
 e9Cz19nvnIse/zHIAYoWhPFMfSTkWgREzCs+VA07bqPCb1/PNHBQmxv2mvdpB8Rw
 r/FjZyptCNyXRSfU28HEImAA7dsB9VtZAVK9oVRXaIOk2G6W5bFfAmQmAPETBRaA
 K9ZExT9oQhQdjKIaya0l
 =6nAH
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/ehabkost/tags/machine-next-pull-request' into staging

Machine queue, 2019-03-11

* memfd fixes (Ilya Maximets)
* Move nvdimms state into struct MachineState (Eric Auger)
* hostmem-file: reject invalid pmem file sizes (Stefan Hajnoczi)

# gpg: Signature made Tue 12 Mar 2019 00:57:41 GMT
# gpg:                using RSA key 2807936F984DC5A6
# gpg: Good signature from "Eduardo Habkost <ehabkost@redhat.com>" [full]
# Primary key fingerprint: 5A32 2FD5 ABC4 D3DB ACCF  D1AA 2807 936F 984D C5A6

* remotes/ehabkost/tags/machine-next-pull-request:
  memfd: improve error messages
  memfd: set up correct errno if not supported
  memfd: always check for MFD_CLOEXEC
  hostmem-memfd: disable for systems without sealing support
  machine: Move nvdimms state into struct MachineState
  nvdimm: Rename AcpiNVDIMMState into NVDIMMState
  hostmem-file: reject invalid pmem file sizes

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Peter Maydell 2019-03-12 15:25:46 +00:00
commit 2cb73afa6a
16 changed files with 206 additions and 91 deletions

View file

@ -512,6 +512,59 @@ void os_mem_prealloc(int fd, char *area, size_t memory, int smp_cpus,
}
}
uint64_t qemu_get_pmem_size(const char *filename, Error **errp)
{
struct stat st;
if (stat(filename, &st) < 0) {
error_setg(errp, "unable to stat pmem file \"%s\"", filename);
return 0;
}
#if defined(__linux__)
/* Special handling for devdax character devices */
if (S_ISCHR(st.st_mode)) {
char *subsystem_path = NULL;
char *subsystem = NULL;
char *size_path = NULL;
char *size_str = NULL;
uint64_t ret = 0;
subsystem_path = g_strdup_printf("/sys/dev/char/%d:%d/subsystem",
major(st.st_rdev), minor(st.st_rdev));
subsystem = g_file_read_link(subsystem_path, NULL);
if (!subsystem) {
error_setg(errp, "unable to read subsystem for pmem file \"%s\"",
filename);
goto devdax_err;
}
if (!g_str_has_suffix(subsystem, "/dax")) {
error_setg(errp, "pmem file \"%s\" is not a dax device", filename);
goto devdax_err;
}
size_path = g_strdup_printf("/sys/dev/char/%d:%d/size",
major(st.st_rdev), minor(st.st_rdev));
if (!g_file_get_contents(size_path, &size_str, NULL, NULL)) {
error_setg(errp, "unable to read size for pmem file \"%s\"",
size_path);
goto devdax_err;
}
ret = g_ascii_strtoull(size_str, NULL, 0);
devdax_err:
g_free(size_str);
g_free(size_path);
g_free(subsystem);
g_free(subsystem_path);
return ret;
}
#endif /* defined(__linux__) */
return st.st_size;
}
char *qemu_get_pid_name(pid_t pid)
{