LINUX.ORG.RU

The Witcher 2 помог найти регрессию в ядре Linux

 ,


1

2

Общеизвестно, что The Witcher 2: Assassins of Kings был портирован на GNU/Linux с помощью обёртки по типу wine, что весьма огорчило фанатов, которые ожидали родной порт.

Однако, когда в какой-то момент игра перестала запускаться как надо, проблема была обнаружена в ядре Linux и сам Линус Торвальдс наваял патч, исправляющий её.

В комментариях к описанию проблемы Линус написал примерно следующее: «Кстати, это хорошая отмазка для разработчиков x86 чтобы попробовать несколько игр со Steam. Это реально хороший тест для выявления неадекватного поведения системы».

>>> Подробности

★★★★★

Проверено: anonymous_incognito ()
Последнее исправление: Klymedy (всего исправлений: 10)

Ответ на: комментарий от bj

Идиот как раз ты, потому что из этого:

diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
index 50d033a..fc237fd 100644
--- a/arch/x86/include/asm/desc.h
+++ b/arch/x86/include/asm/desc.h
@@ -251,7 +251,8 @@ static inline void native_load_tls(struct thread_struct *t, unsigned int cpu)
gdt[GDT_ENTRY_TLS_MIN + i] = t->tls_array[i];
}
-#define _LDT_empty(info) \
+/* This intentionally ignores lm, since 32-bit apps don't have that field. */
+#define LDT_empty(info) \
((info)->base_addr == 0 && \
(info)->limit == 0 && \
(info)->contents == 0 && \
@@ -261,12 +262,6 @@ static inline void native_load_tls(struct thread_struct *t, unsigned int cpu)
(info)->seg_not_present == 1 && \
(info)->useable == 0)
-#ifdef CONFIG_X86_64
-#define LDT_empty(info) (_LDT_empty(info) && ((info)->lm == 0))
-#else
-#define LDT_empty(info) (_LDT_empty(info))
-#endif
-
static inline void clear_LDT(void)
{
set_ldt(NULL, 0);

напрашивается, что раз lm теперь на 0 не проверяется, то дескриптор (или что там за info?) может быть проинициализирован от балды. К чему это приведет мне пофиг, просто факт таков, что проверки стали менее жесткими

anonymous
()
Ответ на: комментарий от anonymous

Твоя любимая фантазия, анончик?

anonymous
()
Ответ на: комментарий от sluggard

А может о тебе, почём знать? Твой любимый ляликс обидели, вычесли меня по IP и накажи

anonymous
()
Ответ на: комментарий от ZenitharChampion

T-rexx'овскую 743895 или что-то типа того попробуй запусти.

turtle_bazon ★★★★★
()
Ответ на: комментарий от Evgueni

Да, так правильнее, просто opennet доступнее. :) Ну и помимо исходников надо бы ещё и тикет читать на гитхабе, чтобы понимать что к чему.

turtle_bazon ★★★★★
()
Ответ на: комментарий от trueshell

В сторону сообщества проприетарных стимовских игрунов? :)

Даже если и так, они являются частью linux-сообщества

vq156 ★★
()
Ответ на: комментарий от vq156

Как будто linux-соовщество - это что-то хорошее

anonymous
()
Ответ на: комментарий от vq156

они являются частью linux-сообщества

проприетарщина под любым соусом не может являться частью linux-сообщества

trueshell ★★★★★
()
Ответ на: комментарий от sluggard

За ссылку спасибо. Но мне все-же не понятен смысл вызова set_thread_area с обнуленной структурой. Ведь entry_number == -1 уже оперирует со свободным слотом. А так им 2 вызова придется делать вместо одного, наверное, исходников ведь нет. В результате проще расширить функционал ядра ОС чем поправить багованную игрульку. Да здравстует opensource!

A-234 ★★★★★
()
Ответ на: комментарий от A-234

расширить функционал

Продолжить на всё пространство, ёба

anonymous
()

и вообще объясните, зачем эти говнокодеры полезли в такой low-level, ну вот если syscall(SYS_set_thread_area это значит что даже в glibc для этого враппера нет. вроде в pthread есть tls, что этот говнокод делает?

anonymous
()
Ответ на: комментарий от Dred

А он разве тормозит, у меня на работе гавно мамонта в виде компа (амд х2 5000+ и видео gforce 8600 gt - летает на максималках.

anonymous
()
Ответ на: комментарий от anonymous

я не знаю что не так, но он умудряется нагревать мой ноутбук используя при этом оптимус (дискретное видео), при этом переодически зависать (чаще, когда захожу в область карты где не был ещё)

Dred ★★★★★
()
Последнее исправление: Dred (всего исправлений: 1)

А есть-ли инструменты, которые проверяют API на соответствие документации и «подсвечивают» подобные дыры?

Ну или хотя-бы ищут недокументированные моменты?

kir2yar
()

Костыли для совместимости с ранее использованными ошибками.

Я не настаиваю на том, что в данном конкретном случае имеет место именно упомянутое мной развитие событий. Но ситуация, по моему скромному убеждению, близка. Можете считать меня радикальным, идиотом, сектантом, ультранеолуддитом, но я имею сказать следующее:

  1. программы несовершенны и постоянно меняются;
  2. документация несовершенна и постоянно меняется;
  3. одной из основных функций документации является формирование представления о реально работающем коде с точки зрения его задач, т. е. с точки зрения идеального;
  4. изучать или вспоминать работу документированного кода несравненно легче, нежели работающего кода непосредственно, т. к. документация может отражать скрытую причинно-следственную связь между задачами, решаемыми рабочим кодом, и формой-содержанием рабочего кода;
  5. из пп. 3 и 4 следует, что документация важнее реально работающего кода;
  6. документация принципиально не способна отразить работу реального кода, как в случае прямого, так и в случае обратного проектирования;
  7. другой, но тоже основной функцией документации является коммуникативно-нормативная, т. е. документация выступает набором строгих правил и рекомендаций, которыми пользуются разработчики разных проектов для достижения совместимости;
  8. унификация, обобщение, минимизация и отработка широко используемого рабочего кода рациональна, т. к. позволяет снижать издержки на его поддержку, а также на обеспечение совместимости с ним стороннего кода;
  9. допущение частных решений для обеспечения совместимости иррационально, т.к. противоречит п. 8.

Вот почему я считаю (это всего лишь моё скромное и весьма спорное мнение), что:

  1. открытая система разработки и поддержки реально работающего кода принципиально предпочтительна, как вынуждающая к широкому сотрудничеству (т. е. с неопределённым кругом не только пользователей, но и соавторов) и документированию;
  2. открытость предпочтительно строго соблюдать как для документации, так и для реализации реально работающего кода, а также для процесса разработки (доработки, внедрения, поддержки); в противном случае отделение ошибок и зоны ответственности становится категорически невозможным (Впрочем, о чём я? Ведь у программистов же отказ от гарантий и ответственности);
  3. делая заключение из пп. 1 и 2, вынужден признать правоту безумного Столлмана.

Такие дела.

Хотелось бы более развёрнуто, но пока меня на это не хватило. Может быть, прочесть что-нибудь на тему?

akj
()
Ответ на: комментарий от kir2yar

есть, называется testsuite. правда, баг в плохой документации, приведшей к неправильному использованию api

anonymous
()
Ответ на: комментарий от anonymous

И эта «огромная» часть - 100500 браузеров и плееров. 99% линуксового софта - бесполезный мусор.

Неверно. Есть только браузер. Плеера нормального нет. И не ожидается, видимо. Зато есть виртуализация с пробросом железа. Поднимаешь виртуальную венду с проброшенным клавой/мышью/видяхой и получаешь всё и почти в линуксе при этом.

targitaj ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.