From owner-svn-src-all@freebsd.org Fri Jan 25 11:12:24 2019 Return-Path: Delivered-To: svn-src-all@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E32FD14B11C2; Fri, 25 Jan 2019 11:12:23 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) server-signature RSA-PSS (4096 bits) client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "Let's Encrypt Authority X3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 8B9C775DDF; Fri, 25 Jan 2019 11:12:23 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 7D94574FA; Fri, 25 Jan 2019 11:12:23 +0000 (UTC) (envelope-from kib@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id x0PBCNIY011092; Fri, 25 Jan 2019 11:12:23 GMT (envelope-from kib@FreeBSD.org) Received: (from kib@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id x0PBCNCC011090; Fri, 25 Jan 2019 11:12:23 GMT (envelope-from kib@FreeBSD.org) Message-Id: <201901251112.x0PBCNCC011090@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: kib set sender to kib@FreeBSD.org using -f From: Konstantin Belousov Date: Fri, 25 Jan 2019 11:12:23 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r343423 - stable/12/sys/dev/nvdimm X-SVN-Group: stable-12 X-SVN-Commit-Author: kib X-SVN-Commit-Paths: stable/12/sys/dev/nvdimm X-SVN-Commit-Revision: 343423 X-SVN-Commit-Repository: base MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 8B9C775DDF X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org X-Spamd-Result: default: False [-2.97 / 15.00]; local_wl_from(0.00)[FreeBSD.org]; NEURAL_HAM_MEDIUM(-1.00)[-0.998,0]; NEURAL_HAM_SHORT(-0.97)[-0.974,0]; ASN(0.00)[asn:11403, ipnet:2610:1c1:1::/48, country:US]; NEURAL_HAM_LONG(-1.00)[-1.000,0] X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 25 Jan 2019 11:12:24 -0000 Author: kib Date: Fri Jan 25 11:12:22 2019 New Revision: 343423 URL: https://svnweb.freebsd.org/changeset/base/343423 Log: MFC r343144: nvdimm: initialize SPA uuids statically. Modified: stable/12/sys/dev/nvdimm/nvdimm_spa.c stable/12/sys/dev/nvdimm/nvdimm_var.h Directory Properties: stable/12/ (props changed) Modified: stable/12/sys/dev/nvdimm/nvdimm_spa.c ============================================================================== --- stable/12/sys/dev/nvdimm/nvdimm_spa.c Fri Jan 25 11:11:28 2019 (r343422) +++ stable/12/sys/dev/nvdimm/nvdimm_spa.c Fri Jan 25 11:12:22 2019 (r343423) @@ -1,6 +1,7 @@ /*- * Copyright (c) 2017, 2018 The FreeBSD Foundation * All rights reserved. + * Copyright (c) 2018, 2019 Intel Corporation * * This software was developed by Konstantin Belousov * under sponsorship from the FreeBSD Foundation. @@ -64,6 +65,23 @@ __FBSDID("$FreeBSD$"); #include #include +#define UUID_INITIALIZER_VOLATILE_MEMORY \ + {0x7305944f,0xfdda,0x44e3,0xb1,0x6c,{0x3f,0x22,0xd2,0x52,0xe5,0xd0}} +#define UUID_INITIALIZER_PERSISTENT_MEMORY \ + {0x66f0d379,0xb4f3,0x4074,0xac,0x43,{0x0d,0x33,0x18,0xb7,0x8c,0xdb}} +#define UUID_INITIALIZER_CONTROL_REGION \ + {0x92f701f6,0x13b4,0x405d,0x91,0x0b,{0x29,0x93,0x67,0xe8,0x23,0x4c}} +#define UUID_INITIALIZER_DATA_REGION \ + {0x91af0530,0x5d86,0x470e,0xa6,0xb0,{0x0a,0x2d,0xb9,0x40,0x82,0x49}} +#define UUID_INITIALIZER_VOLATILE_VIRTUAL_DISK \ + {0x77ab535a,0x45fc,0x624b,0x55,0x60,{0xf7,0xb2,0x81,0xd1,0xf9,0x6e}} +#define UUID_INITIALIZER_VOLATILE_VIRTUAL_CD \ + {0x3d5abd30,0x4175,0x87ce,0x6d,0x64,{0xd2,0xad,0xe5,0x23,0xc4,0xbb}} +#define UUID_INITIALIZER_PERSISTENT_VIRTUAL_DISK \ + {0x5cea02c9,0x4d07,0x69d3,0x26,0x9f,{0x44,0x96,0xfb,0xe0,0x96,0xf9}} +#define UUID_INITIALIZER_PERSISTENT_VIRTUAL_CD \ + {0x08018188,0x42cd,0xbb48,0x10,0x0f,{0x53,0x87,0xd5,0x3d,0xed,0x3d}} + struct SPA_mapping *spa_mappings; int spa_mappings_cnt; @@ -79,52 +97,64 @@ nvdimm_spa_count(void *nfitsubtbl __unused, void *arg) static struct nvdimm_SPA_uuid_list_elm { const char *u_name; - const char *u_id_str; struct uuid u_id; const bool u_usr_acc; } nvdimm_SPA_uuid_list[] = { [SPA_TYPE_VOLATILE_MEMORY] = { .u_name = "VOLA MEM ", - .u_id_str = UUID_VOLATILE_MEMORY, + .u_id = UUID_INITIALIZER_VOLATILE_MEMORY, .u_usr_acc = true, }, [SPA_TYPE_PERSISTENT_MEMORY] = { .u_name = "PERS MEM", - .u_id_str = UUID_PERSISTENT_MEMORY, + .u_id = UUID_INITIALIZER_PERSISTENT_MEMORY, .u_usr_acc = true, }, [SPA_TYPE_CONTROL_REGION] = { .u_name = "CTRL RG ", - .u_id_str = UUID_CONTROL_REGION, + .u_id = UUID_INITIALIZER_CONTROL_REGION, .u_usr_acc = false, }, [SPA_TYPE_DATA_REGION] = { .u_name = "DATA RG ", - .u_id_str = UUID_DATA_REGION, + .u_id = UUID_INITIALIZER_DATA_REGION, .u_usr_acc = true, }, [SPA_TYPE_VOLATILE_VIRTUAL_DISK] = { .u_name = "VIRT DSK", - .u_id_str = UUID_VOLATILE_VIRTUAL_DISK, + .u_id = UUID_INITIALIZER_VOLATILE_VIRTUAL_DISK, .u_usr_acc = true, }, [SPA_TYPE_VOLATILE_VIRTUAL_CD] = { .u_name = "VIRT CD ", - .u_id_str = UUID_VOLATILE_VIRTUAL_CD, + .u_id = UUID_INITIALIZER_VOLATILE_VIRTUAL_CD, .u_usr_acc = true, }, [SPA_TYPE_PERSISTENT_VIRTUAL_DISK] = { .u_name = "PV DSK ", - .u_id_str = UUID_PERSISTENT_VIRTUAL_DISK, + .u_id = UUID_INITIALIZER_PERSISTENT_VIRTUAL_DISK, .u_usr_acc = true, }, [SPA_TYPE_PERSISTENT_VIRTUAL_CD] = { .u_name = "PV CD ", - .u_id_str = UUID_PERSISTENT_VIRTUAL_CD, + .u_id = UUID_INITIALIZER_PERSISTENT_VIRTUAL_CD, .u_usr_acc = true, }, }; +enum SPA_mapping_type +nvdimm_spa_type_from_uuid(struct uuid *uuid) +{ + int j; + + for (j = 0; j < nitems(nvdimm_SPA_uuid_list); j++) { + if (uuidcmp(uuid, &nvdimm_SPA_uuid_list[j].u_id) != 0) + continue; + return (j); + } + return (SPA_TYPE_UNKNOWN); +} + static vm_memattr_t nvdimm_spa_memattr(struct SPA_mapping *spa) { @@ -538,48 +568,30 @@ nvdimm_spa_parse(void *nfitsubtbl, void *arg) { ACPI_NFIT_SYSTEM_ADDRESS *nfitaddr; struct SPA_mapping *spa; - int error, *i, j; + enum SPA_mapping_type spa_type; + int error, *i; i = arg; - spa = &spa_mappings[*i]; + spa = &spa_mappings[(*i)++]; nfitaddr = nfitsubtbl; - - for (j = 0; j < nitems(nvdimm_SPA_uuid_list); j++) { - /* XXXKIB: is ACPI UUID representation compatible ? */ - if (uuidcmp((struct uuid *)&nfitaddr->RangeGuid, - &nvdimm_SPA_uuid_list[j].u_id) != 0) - continue; - error = nvdimm_spa_init_one(spa, nfitaddr, j); - if (error != 0) - nvdimm_spa_fini_one(spa); - break; - } - if (j == nitems(nvdimm_SPA_uuid_list) && bootverbose) { + spa_type = nvdimm_spa_type_from_uuid( + (struct uuid *)&nfitaddr->RangeGuid); + if (spa_type == SPA_TYPE_UNKNOWN) { printf("Unknown SPA UUID %d ", nfitaddr->RangeIndex); printf_uuid((struct uuid *)&nfitaddr->RangeGuid); printf("\n"); + return (0); } - (*i)++; + error = nvdimm_spa_init_one(spa, nfitaddr, spa_type); + if (error != 0) + nvdimm_spa_fini_one(spa); return (0); } static int nvdimm_spa_init1(ACPI_TABLE_NFIT *nfitbl) { - struct nvdimm_SPA_uuid_list_elm *sle; int error, i; - - for (i = 0; i < nitems(nvdimm_SPA_uuid_list); i++) { - sle = &nvdimm_SPA_uuid_list[i]; - error = parse_uuid(sle->u_id_str, &sle->u_id); - if (error != 0) { - if (bootverbose) - printf("nvdimm_identify: error %d parsing " - "known SPA UUID %d %s\n", error, i, - sle->u_id_str); - return (error); - } - } error = nvdimm_iterate_nfit(nfitbl, ACPI_NFIT_TYPE_SYSTEM_ADDRESS, nvdimm_spa_count, &spa_mappings_cnt); Modified: stable/12/sys/dev/nvdimm/nvdimm_var.h ============================================================================== --- stable/12/sys/dev/nvdimm/nvdimm_var.h Fri Jan 25 11:11:28 2019 (r343422) +++ stable/12/sys/dev/nvdimm/nvdimm_var.h Fri Jan 25 11:12:22 2019 (r343423) @@ -60,6 +60,7 @@ enum SPA_mapping_type { SPA_TYPE_VOLATILE_VIRTUAL_CD = 5, SPA_TYPE_PERSISTENT_VIRTUAL_DISK= 6, SPA_TYPE_PERSISTENT_VIRTUAL_CD = 7, + SPA_TYPE_UNKNOWN = 127, }; struct SPA_mapping { @@ -88,6 +89,7 @@ extern int spa_mappings_cnt; MALLOC_DECLARE(M_NVDIMM); +enum SPA_mapping_type nvdimm_spa_type_from_uuid(struct uuid *); struct nvdimm_dev *nvdimm_find_by_handle(nfit_handle_t nv_handle); int nvdimm_iterate_nfit(ACPI_TABLE_NFIT *nfitbl, enum AcpiNfitType type, int (*cb)(void *, void *), void *arg);