
کرنل پایدار لینوکس ۷.۳ که انتظار میرود فردا منتشر شود، پیش از عرضه نهایی میزبان وصلهها (Patches) و راهکارهای موقت (Workarounds) لحظه آخری برای دو درایو حالت جامد NVMe شرکت سامسونگ، یعنی ۹۹۰ پرو (990 PRO) و ۹۹۰ ایوو پلاس (990 EVO Plus) شده است. این تغییرات از طریق درخواست ادغام (Pull Request) وصلههای زیرسیستم PCI در لینوکس ۷.۳ اعمال شدهاند.
نادیده گرفتن اعلام نادرست قابلیت Immediate Readiness
بر اساس این وصله، هسته لینوکس از این پس اعلام پشتیبانی درایوهای ۹۹۰ پرو و ۹۹۰ ایوو پلاس از قابلیت «آمادگی فوری» (Immediate Readiness) را نادیده میگیرد. استاندارد PCIe 4.0 بیت Immediate Readiness را معرفی کرد تا نشان دهد یک درایو میتواند بلافاصله پس از بازنشانی (Reset) آماده پاسخگویی به درخواستهای پیکربندی باشد؛ ویژگیای که سرعت تعامل سیستمعامل با درایو حالت جامد را پس از بازنشانی بهبود میبخشد.
ریشه مشکل: ناسازگاری برخی نسخههای فریمور
هرچند Immediate Readiness قابلیت مطلوبی به شمار میرود، اما مشخص شده است که دستکم برخی نسخههای فریمور (Firmware) درایوهای ۹۹۰ پرو و ۹۹۰ ایوو پلاس این قابلیت را تبلیغ میکنند، در حالی که در عمل از آن پشتیبانی نمیکنند. همین ناسازگاری، مشکلاتی را برای لینوکس ایجاد کرده و عبوردهی (Pass-through) درایو از طریق VFIO را نیز مختل میکند.
جزئیات فنی وصله اعمالشده
توضیحات وصلهای که اکنون به مخزن Git لینوکس ۷.۳ ادغام شده، چنین است:
- درایو سامسونگ ۹۹۰ پرو با شناسه [144d:a80c] قابلیت Immediate Readiness را اعلام میکند؛ بنابراین تابع pcie_flr() پس از عملیات بازنشانی سطح عملکرد (FLR) منتظر نمیماند، در حالی که این درایو تا حدود ۷ میلیثانیه مقدار صفر بازمیگرداند.
- از زمان کامیت 10baa9b4df40 با عنوان «PCI: Drop unnecessary retries when restoring BARs»، بازگردانی پیکربندی پس از FLR از دست میرود و همین امر عبوردهی درایو از طریق VFIO را از کار میاندازد.
- فریمور نسخه 8B2QJXD7 بلافاصله پس از FLR پاسخ میدهد، اما فریمورهای قدیمیتر مانند 1B2QJXD7 چنین رفتاری ندارند و نسخه فریمور در این مرحله قابل مشاهده نیست.
- به گفته یکی از توسعهدهندگان، درایو سامسونگ ۹۹۰ ایوو پلاس با شناسه [144d:a80d] و فریمور 2B2QKXG7 نیز ظاهراً همین مشکل را دارد.
رفع مشکل پیش از انتشار نسخه پایدار
در نهایت با ادغام شبانه این وصله در شاخه PCI، مشکل مذکور بهموقع و پیش از انتشار نسخه پایدار لینوکس ۷.۳ برطرف شده است. این اقدام نشاندهنده اهمیت هماهنگی میان توسعهدهندگان کرنل و سازندگان سختافزار برای جلوگیری از بروز اختلال در عملکرد درایوهای پرکاربرد است.