From: kernel test robot <lkp@intel.com>
To: Kamal Dasu <kamal.dasu@broadcom.com>,
Ulf Hansson <ulf.hansson@linaro.org>,
Adrian Hunter <adrian.hunter@intel.com>,
Kees Cook <kees@kernel.org>
Cc: oe-kbuild-all@lists.linux.dev, Tony Luck <tony.luck@intel.com>,
"Guilherme G . Piccoli" <gpiccoli@igalia.com>,
Florian Fainelli <florian.fainelli@broadcom.com>,
Arend van Spriel <arend.vanspriel@broadcom.com>,
William Zhang <william.zhang@broadcom.com>,
bcm-kernel-feedback-list@broadcom.com, linux-mmc@vger.kernel.org,
linux-kernel@vger.kernel.org,
Kamal Dasu <kamal.dasu@broadcom.com>
Subject: Re: [PATCH v3 4/4] mmc: core: Add MMC pstore backend driver
Date: Fri, 20 Mar 2026 23:17:26 +0800 [thread overview]
Message-ID: <202603202338.OYFgRuuU-lkp@intel.com> (raw)
In-Reply-To: <20260319185705.1516950-5-kamal.dasu@broadcom.com>
Hi Kamal,
kernel test robot noticed the following build warnings:
[auto build test WARNING on linus/master]
[also build test WARNING on v7.0-rc4 next-20260319]
[cannot apply to ulf-hansson-mmc-mirror/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Kamal-Dasu/mmc-core-Add-panic-context-host-operations-for-pstore-backends/20260320-064639
base: linus/master
patch link: https://lore.kernel.org/r/20260319185705.1516950-5-kamal.dasu%40broadcom.com
patch subject: [PATCH v3 4/4] mmc: core: Add MMC pstore backend driver
config: m68k-allyesconfig (https://download.01.org/0day-ci/archive/20260320/202603202338.OYFgRuuU-lkp@intel.com/config)
compiler: m68k-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260320/202603202338.OYFgRuuU-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202603202338.OYFgRuuU-lkp@intel.com/
All warnings (new ones prefixed by >>):
drivers/mmc/core/mmcpstore.c: In function 'mmcpstore_register_for_card':
>> drivers/mmc/core/mmcpstore.c:1016:23: warning: variable 'offset_bytes' set but not used [-Wunused-but-set-variable]
1016 | unsigned long offset_bytes;
| ^~~~~~~~~~~~
--
>> Warning: drivers/mmc/core/mmcpstore.c:250 function parameter 'sect_offset' not described in 'mmcpstore_do_request_internal'
>> Warning: drivers/mmc/core/mmcpstore.c:573 expecting prototype for mmcpstore_read(). Prototype was for mmcpstore_read_zone() instead
>> Warning: drivers/mmc/core/mmcpstore.c:1248 function parameter 'disk' not described in 'mmcpstore_card_add'
>> Warning: drivers/mmc/core/mmcpstore.c:250 function parameter 'sect_offset' not described in 'mmcpstore_do_request_internal'
>> Warning: drivers/mmc/core/mmcpstore.c:1248 function parameter 'disk' not described in 'mmcpstore_card_add'
vim +/offset_bytes +1016 drivers/mmc/core/mmcpstore.c
998
999 /**
1000 * mmcpstore_register_for_card - Register pstore for specific MMC card
1001 * @card: MMC card to register pstore for
1002 * @dev_name_param: Device path (e.g., "/dev/mmcblk1p5")
1003 * @disk: gendisk for the card (non-NULL for builtin path, NULL for module)
1004 *
1005 * Returns: 0 on success, negative error on failure
1006 */
1007 static int mmcpstore_register_for_card(struct mmc_card *card,
1008 const char *dev_name_param,
1009 struct gendisk *disk)
1010 {
1011 struct mmcpstore_context *cxt;
1012 struct pstore_blk_config conf;
1013 struct file *bdev_file;
1014 struct block_device *bdev;
1015 sector_t partition_sectors;
> 1016 unsigned long offset_bytes;
1017 unsigned long required_size;
1018 unsigned long kmsg_records;
1019 int ret;
1020
1021 /*
1022 * Open the block device to get partition start sector and size.
1023 * When called from mmc_blk_probe() (builtin path), /dev/ may not
1024 * be mounted yet, so use the gendisk + partition number to look
1025 * up the dev_t directly.
1026 */
1027 if (disk) {
1028 int partno = mmcpstore_extract_partno(dev_name_param);
1029 dev_t devt;
1030
1031 if (partno < 0) {
1032 pr_warn("Cannot parse partition from %s\n",
1033 dev_name_param);
1034 return -EINVAL;
1035 }
1036 devt = part_devt(disk, partno);
1037 if (!devt) {
1038 pr_warn("Partition %d not found on %s\n",
1039 partno, disk->disk_name);
1040 return -ENODEV;
1041 }
1042 bdev_file = bdev_file_open_by_dev(devt, BLK_OPEN_READ,
1043 NULL, NULL);
1044 } else {
1045 bdev_file = bdev_file_open_by_path(dev_name_param,
1046 BLK_OPEN_READ, NULL, NULL);
1047 }
1048 if (IS_ERR(bdev_file)) {
1049 ret = PTR_ERR(bdev_file);
1050 pr_warn("Failed to open device %s: %d\n", dev_name_param, ret);
1051 return ret;
1052 }
1053 bdev = file_bdev(bdev_file);
1054
1055 cxt = mmcpstore_ctx;
1056 if (!cxt) {
1057 pr_err("No context available\n");
1058 fput(bdev_file);
1059 return -ENODEV;
1060 }
1061
1062 /* pre-allocated buffer for alignment handling */
1063 cxt->buffer_size = MMC_PSTORE_MAX_BUFFER_SIZE;
1064 cxt->buffer = kmalloc(cxt->buffer_size, GFP_KERNEL);
1065 if (!cxt->buffer) {
1066 pr_err("Failed to allocate %zu bytes for pstore buffer\n",
1067 cxt->buffer_size);
1068 fput(bdev_file);
1069 return -ENOMEM;
1070 }
1071
1072 if (!(card->host->caps & MMC_CAP_NONREMOVABLE)) {
1073 dev_err(&card->dev, "MMC pstore only supports non-removable cards (eMMC)\n");
1074 dev_err(&card->dev, "This card is removable and not suitable for pstore\n");
1075 ret = -EOPNOTSUPP;
1076 goto err_free;
1077 }
1078
1079 /* Initialize context */
1080 cxt->card = card;
1081 strscpy(cxt->card_name, dev_name_param, sizeof(cxt->card_name));
1082 cxt->start_sect = bdev->bd_start_sect;
1083 cxt->size = bdev_nr_bytes(bdev);
1084
1085 /* Apply user-specified sector offset and count within the partition */
1086 if (part_sect_ofs > 0 || part_sect_cnt > 0) {
1087 if ((part_sect_ofs > 0 && part_sect_cnt == 0) ||
1088 (part_sect_ofs == 0 && part_sect_cnt > 0)) {
1089 dev_err(&card->dev, "sector_offset and sector_count must be specified\n");
1090 ret = -EINVAL;
1091 goto err_free;
1092 }
1093
1094 /* Validate offset and count */
1095 partition_sectors = cxt->size >> 9;
1096 offset_bytes = part_sect_ofs * MMC_PSTORE_SECTOR_SIZE;
1097
1098 if (part_sect_ofs >= partition_sectors) {
1099 dev_err(&card->dev, "Sector offset %lu >= partition size %llu sectors\n",
1100 part_sect_ofs, partition_sectors);
1101 ret = -EINVAL;
1102 goto err_free;
1103 }
1104
1105 if (part_sect_ofs + part_sect_cnt > partition_sectors) {
1106 dev_err(&card->dev, "Sector range %lu-%lu exceeds partition size %llu sectors\n",
1107 part_sect_ofs,
1108 part_sect_ofs + part_sect_cnt - 1,
1109 partition_sectors);
1110 ret = -EINVAL;
1111 goto err_free;
1112 }
1113
1114 cxt->start_sect += part_sect_ofs;
1115 cxt->size = part_sect_cnt * MMC_PSTORE_SECTOR_SIZE;
1116
1117 pr_info("Pstore will use: sectors %lu-%lu (%llu bytes total)\n",
1118 part_sect_ofs, part_sect_ofs + part_sect_cnt - 1,
1119 cxt->size);
1120 }
1121
1122 fput(bdev_file);
1123
1124 /* Configure pstore */
1125 memset(&conf, 0, sizeof(conf));
1126 strscpy(conf.device, dev_name_param, sizeof(conf.device));
1127 conf.max_reason = KMSG_DUMP_PANIC;
1128
1129 /* Fetch pstore configuration including sizes from module parameters */
1130 ret = pstore_blk_get_config(&conf);
1131 if (ret != 0) {
1132 pr_err("Failed to get pstore block config: %d\n", ret);
1133 goto err_free;
1134 }
1135
1136 /* Validate size requirements */
1137 ret = mmcpstore_calculate_sizes(cxt, &conf, &required_size,
1138 &kmsg_records);
1139 if (ret)
1140 goto err_free;
1141
1142 pr_debug("Pstore requirements: kmsg=%lu KB, pmsg=%lu KB, console=%lu KB, ftrace=%lu KB\n",
1143 MMC_PSTORE_BYTES_TO_KB(conf.kmsg_size),
1144 MMC_PSTORE_BYTES_TO_KB(conf.pmsg_size),
1145 MMC_PSTORE_BYTES_TO_KB(conf.console_size),
1146 MMC_PSTORE_BYTES_TO_KB(conf.ftrace_size));
1147 pr_debug("Pstore capacity: ~%lu kmsg records possible (%lu KB each, varies with compression)\n",
1148 kmsg_records, MMC_PSTORE_BYTES_TO_KB(conf.kmsg_size));
1149
1150 /* Set up pstore device info */
1151 cxt->dev.flags = 0; /* Support all backends */
1152 if (conf.kmsg_size > 0)
1153 cxt->dev.flags |= PSTORE_FLAGS_DMESG;
1154 if (conf.pmsg_size > 0)
1155 cxt->dev.flags |= PSTORE_FLAGS_PMSG;
1156 if (conf.console_size > 0)
1157 cxt->dev.flags |= PSTORE_FLAGS_CONSOLE;
1158 if (conf.ftrace_size > 0)
1159 cxt->dev.flags |= PSTORE_FLAGS_FTRACE;
1160
1161 /* Set up zone structure for pstore/zone API */
1162 cxt->dev.zone.read = mmcpstore_read_zone;
1163 cxt->dev.zone.write = mmcpstore_write;
1164 cxt->dev.zone.panic_write = mmcpstore_panic_write;
1165 cxt->dev.zone.total_size = cxt->size;
1166 cxt->dev.zone.kmsg_size = conf.kmsg_size;
1167 cxt->dev.zone.pmsg_size = conf.pmsg_size;
1168 cxt->dev.zone.console_size = conf.console_size;
1169 cxt->dev.zone.ftrace_size = conf.ftrace_size;
1170 cxt->dev.zone.max_reason = conf.max_reason;
1171 cxt->dev.zone.name = "mmcpstore";
1172 cxt->dev.zone.owner = THIS_MODULE;
1173
1174 mutex_init(&cxt->lock);
1175
1176 /*
1177 * Set state to READY before registration because register_pstore_device()
1178 * triggers pstore_zone recovery which calls our read callback, and the
1179 * read callback requires state == READY to proceed.
1180 */
1181 mutex_lock(&mmcpstore_global_lock);
1182 cxt->state = MMCPSTORE_STATE_READY;
1183 mutex_unlock(&mmcpstore_global_lock);
1184
1185 ret = register_pstore_device(&cxt->dev);
1186 if (ret) {
1187 dev_err(&card->dev, "Failed to register pstore device: %d\n",
1188 ret);
1189 mutex_lock(&mmcpstore_global_lock);
1190 cxt->state = MMCPSTORE_STATE_UNINITIALIZED;
1191 mutex_unlock(&mmcpstore_global_lock);
1192 goto err_free;
1193 }
1194
1195 dev_info(&card->dev, "MMC pstore backend registered successfully\n");
1196 dev_info(&card->dev, "Device: %s, Size: %llu bytes (%llu KB)\n",
1197 dev_name_param, cxt->size, MMC_PSTORE_BYTES_TO_KB(cxt->size));
1198 dev_info(&card->dev, "Start sector: %llu, Sector count: %llu\n",
1199 cxt->start_sect, cxt->size / MMC_PSTORE_SECTOR_SIZE);
1200 dev_info(&card->dev, "Pstore components: kmsg=%lu KB, pmsg=%lu KB, console=%lu KB, ftrace=%lu KB\n",
1201 MMC_PSTORE_BYTES_TO_KB(conf.kmsg_size),
1202 MMC_PSTORE_BYTES_TO_KB(conf.pmsg_size),
1203 MMC_PSTORE_BYTES_TO_KB(conf.console_size),
1204 MMC_PSTORE_BYTES_TO_KB(conf.ftrace_size));
1205
1206 return 0;
1207
1208 err_free:
1209 kfree(cxt->buffer);
1210 /* Don't free cxt here - it's the global context */
1211 return ret;
1212 }
1213
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next prev parent reply other threads:[~2026-03-20 15:18 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-19 18:57 [PATCH v3 0/4] mmc: Add pstore backend for crash dump storage on eMMC Kamal Dasu
2026-03-19 18:57 ` [PATCH v3 1/4] mmc: core: Add panic-context host operations for pstore backends Kamal Dasu
2026-03-19 18:57 ` [PATCH v3 2/4] mmc: sdhci: Implement panic-context write support Kamal Dasu
2026-03-20 3:40 ` kernel test robot
2026-03-20 16:22 ` kernel test robot
2026-03-19 18:57 ` [PATCH v3 3/4] mmc: block: Add helper to look up mmc_card by device name Kamal Dasu
2026-03-19 18:57 ` [PATCH v3 4/4] mmc: core: Add MMC pstore backend driver Kamal Dasu
2026-03-19 20:59 ` Kees Cook
2026-03-20 15:17 ` kernel test robot [this message]
2026-04-10 15:22 ` Kamal Dasu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202603202338.OYFgRuuU-lkp@intel.com \
--to=lkp@intel.com \
--cc=adrian.hunter@intel.com \
--cc=arend.vanspriel@broadcom.com \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=florian.fainelli@broadcom.com \
--cc=gpiccoli@igalia.com \
--cc=kamal.dasu@broadcom.com \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mmc@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=tony.luck@intel.com \
--cc=ulf.hansson@linaro.org \
--cc=william.zhang@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.