The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"win4lin и ядро 2.6.7"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"win4lin и ядро 2.6.7"
Сообщение от dstrange Искать по авторуВ закладки on 26-Июн-04, 19:19  (MSK)
Имеем: Mandrake 10 с ядром 2.6.7 из cooker, Win4Lin 5, патчи с netraverse.com
Проблема следующая: не удается запустить win4lin. На 2.4.20 все было в норме, а вот под 2.6.7 никак. На официальном сайте kernel-патч выложен только для 2.6.6. Качать исходники 2.6.6 не особо хочется, я решил попробовать применить к 2.6.7 патч от 2.6.6. Оказалось, что действительно больших изменений в тех местах, куда прикладывался патч, не оказалось. Всего три rejectа, исправил руками. Второй патч mki-adapter26-1.3.5 установился без вопросов, но в процессе компиляции ядра вываливалась ошибка, что-то про структуру count. Припомнил, что такая трабла было с драйверами от ATI, заменил в исходниках mki-adapter ->count на ->_count. Все прошло. Но...
modprobe mki-adapter проходит без ошибок. lsmod показывает наличие модуля в памяти, однако он не работает. Win4Lin не запускается, ругается что нет или не работает драйвер. /proc/ksyms отсутствует.
У кого получилось запустить win4lin на 2.6.7? В чем траблы? Где еще копнуть?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "по поводу _count"
Сообщение от dstrange Искать по авторуВ закладки on 27-Июн-04, 08:32  (MSK)
Цитата из kernel changelog:
<akpm@osdl.org>
[PATCH] Fix page double-freeing race
This has been there for nearly two years.  See bugzilla #1403
vmscan.c does, in two places:
spin_lock(zone->lru_lock)
page = lru_to_page(&zone->inactive_list);
if (page_count(page) == 0) {
/* erk, it's being freed by __page_cache_release() or
* release_pages()
*/
put_it_back_on_the_lru();
} else {
--> window 1 <--
page_cache_get(page);
put_in_on_private_list();
}
spin_unlock(zone->lru_lock)
use_the_private_list();
page_cache_release(page);
whereas __page_cache_release() and release_pages() do:
if (put_page_testzero(page)) {
--> window 2 <--
spin_lock(lru->lock);
if (page_count(page) == 0) {
remove_it_from_the_lru();
really_free_the_page()
}
spin_unlock(zone->lru_lock)
}

The race occurs if the vmscan.c path sees page_count()==1 and then the
page_cache_release() path happens in that few-instruction "window 1" before
vmscan's page_cache_get().
The page_cache_release() path does put_page_testzero(), which returns true.
Then this CPU takes an interrupt...
The vmscan.c path then does page_cache_get(), taking the refcount to one.
Then it uses the page and does page_cache_release(), taking the refcount to
zero and the page is really freed.
Now, the CPU running page_cache_release() returns from the interrupt, takes
the LRU lock, sees the page still has a refcount of zero and frees it again.
Boom.

The patch fixes this by closing "window 1".  We provide a
"get_page_testone()" which grabs a ref on the page and returns true if the
refcount was previously zero.  If that happens the vmscan.c code simply drops
the page's refcount again and leaves the page on the LRU.
All this happens under the zone->lru_lock, which is also taken by
__page_cache_release() and release_pages(), so the vmscan code knows that the
page has not been returned to the page allocator yet.

In terms of implementation, the page counts are now offset by one: a free page
has page->_count of -1.  This is so that we can use atomic_add_negative() and
atomic_inc_and_test() to provide put_page_testzero() and get_page_testone().

The macros hide all of this so the public interpretation of page_count() and
set_page_count() remains unaltered.

The compiler can usually constant-fold the offsetting of page->count.  This
patch increases an x86 SMP kernel's text by 32 bytes.

The patch renames page->count to page->_count to break callers who aren't
using the macros.

This patch requires that the architecture implement atomic_add_negative().  It
is currently present on

arm
arm26
i386
ia64
mips
ppc
s390
v850
x86_64

ppc implements this as

#define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0)

and atomic_add_return() is implemented on

alpha
cris
h8300
ia64
m68knommu
mips
parisc
ppc
ppc
ppc64
s390
sh
sparc
v850

so we're looking pretty good.

Не совсем все понял, но вроде бы в моем случае действительно надо было лишь заменить ->count на ->_count.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "по поводу _count"
Сообщение от Vladimir Dyakov emailИскать по авторуВ закладки on 30-Июн-04, 17:05  (MSK)
>Не совсем все понял, но вроде бы в моем случае действительно надо было лишь заменить ->count на ->_count.

Интересно, вы всё-таки побороли вин4лин? Он у вас запускается?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "по поводу _count"
Сообщение от Vladimir Dyakov emailИскать по авторуВ закладки on 30-Июн-04, 17:12  (MSK)
>>Не совсем все понял, но вроде бы в моем случае действительно надо было лишь заменить ->count на ->_count.
>
>Интересно, вы всё-таки побороли вин4лин? Он у вас запускается?


Прошу прощения, гугль закэшировал старую версию треда ;)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "win4lin и ядро 2.6.7"
Сообщение от alchie Искать по авторуВ закладки(??) on 29-Июн-04, 03:08  (MSK)

>он не работает. Win4Lin не запускается, ругается что нет или не
>работает драйвер. /proc/ksyms отсутствует.

замени все вхождения /proc/ksyms на /proc/kallsyms в /var/win4lin
не далее, как вчера после прочтения
http://bugs.gentoo.org/show_bug.cgi?id=53729
запустил на 2.6.6

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "win4lin и ядро 2.6.7"
Сообщение от dstrange Искать по авторуВ закладки on 29-Июн-04, 11:25  (MSK)
Все! Победил. Оказалось, надо было версию поновее ставить. У меня старовата оказалась.
Вывод: 2.6.7 плюс подправленные патчи плюс последняя версия win4lin - все работает отлично
  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру