3900 {
3901 const char *logname = "kmem_transaction_log";
3902 kmalog_data_t kma;
3903
3904 if (argc > 1)
3905 return (DCMD_USAGE);
3906
3907 kma.kma_newest = 0;
3908 if (flags & DCMD_ADDRSPEC)
3909 kma.kma_addr = addr;
3910 else
3911 kma.kma_addr = 0;
3912
3913 if (argc > 0) {
3914 if (argv->a_type != MDB_TYPE_STRING)
3915 return (DCMD_USAGE);
3916 if (strcmp(argv->a_un.a_str, "fail") == 0)
3917 logname = "kmem_failure_log";
3918 else if (strcmp(argv->a_un.a_str, "slab") == 0)
3919 logname = "kmem_slab_log";
3920 else
3921 return (DCMD_USAGE);
3922 }
3923
3924 if (mdb_readvar(&addr, logname) == -1) {
3925 mdb_warn("failed to read %s log header pointer");
3926 return (DCMD_ERR);
3927 }
3928
3929 if (mdb_pwalk("kmem_log", (mdb_walk_cb_t)showbc, &kma, addr) == -1) {
3930 mdb_warn("failed to walk kmem log");
3931 return (DCMD_ERR);
3932 }
3933
3934 return (DCMD_OK);
3935 }
3936
3937 /*
3938 * As the final lure for die-hard crash(1M) users, we provide ::kmausers here.
3939 * The first piece is a structure which we use to accumulate kmem_cache_t
|
3900 {
3901 const char *logname = "kmem_transaction_log";
3902 kmalog_data_t kma;
3903
3904 if (argc > 1)
3905 return (DCMD_USAGE);
3906
3907 kma.kma_newest = 0;
3908 if (flags & DCMD_ADDRSPEC)
3909 kma.kma_addr = addr;
3910 else
3911 kma.kma_addr = 0;
3912
3913 if (argc > 0) {
3914 if (argv->a_type != MDB_TYPE_STRING)
3915 return (DCMD_USAGE);
3916 if (strcmp(argv->a_un.a_str, "fail") == 0)
3917 logname = "kmem_failure_log";
3918 else if (strcmp(argv->a_un.a_str, "slab") == 0)
3919 logname = "kmem_slab_log";
3920 else if (strcmp(argv->a_un.a_str, "zerosized") == 0)
3921 logname = "kmem_zerosized_log";
3922 else
3923 return (DCMD_USAGE);
3924 }
3925
3926 if (mdb_readvar(&addr, logname) == -1) {
3927 mdb_warn("failed to read %s log header pointer");
3928 return (DCMD_ERR);
3929 }
3930
3931 if (mdb_pwalk("kmem_log", (mdb_walk_cb_t)showbc, &kma, addr) == -1) {
3932 mdb_warn("failed to walk kmem log");
3933 return (DCMD_ERR);
3934 }
3935
3936 return (DCMD_OK);
3937 }
3938
3939 /*
3940 * As the final lure for die-hard crash(1M) users, we provide ::kmausers here.
3941 * The first piece is a structure which we use to accumulate kmem_cache_t
|