Как стать автором
Обновить
64
0
Павел @RPG

Пользователь

Отправить сообщение
Ответ не обязательно придет сразу, это же опенсорс. Мейнтейнер вашего куска кода может быть в отпуске или в тюрьме. А если исправление касалось очень старого драйвера — возможно сам драйвер попахивает и пора поднимать вопрос о его исключении? Для оперативного обсуждения можно попробовать в IRC (тоже не факт что ответят сразу).
  /* make debug message */
  msg[0] = '\0';
  for (j = 0; j < i; j++) {
      snprintf(str, 128, " %02X", buf[j]);
      strcat(msg, str);
  }


Алгоритм маляра Шлемиэля даже в ядре? Хотя это скорее всего никому не нужный драйвер. Одно дело если бы такая ошибка была в fs/ и другое — в каком-то драйвере, которым пользуются только экстремалы.
Насколько я понял, смысл в том, чтобы сообщить разработчику, что пора разбить этот разросшийся файл на несколько частей.
Может, куда-нибудь в тело макроса запихнуть:
if(__LINE__ > 1000) exit(-1);
Ошибка всплывёт не на этапе компиляции, но хотя бы в рантайме.
Очень круто. Это из серии «надо бы сделать такую штуку, но лень». Но бывают и такие тесты:)

Не уверен, что правильно понял идею, но в gcc вроде бы a[5] = {0,0,0,0,0} то же что и a[5] = {0}. Т.е. можно задать длинный-предлинный массив и по ходу регистрации тестов закидывать в него указатели.
Я думаю это всё же контроль ошибок для объектов ядра. А объекты берутся явно не с потолка, для них сначала выделяют память через kmalloc, который не должен выделять адреса из пространства, зарезервированного под коды ошибок, так как сам возвращает коды ошибок из этого диапазона — круг замкнулся. По сути нужно лишь гарантировать, что malloc не вернёт адрес из области 0-MAX_ERRNO, а это достаточно просто.
Можно в принципе не полагаться на теорию вероятностей, а посмотреть, как происходит распределение сегментов памяти в программе. По крайней мере NULL — это невалидный указатель. Далее исходим из того, что память ядро выравнивает по 4 килобайта, а также из того, что по младшим адресам всегда помещаются сегменты кода и данных. То есть ядро (и тем более malloc) не будет размещать какие-либо данные как минимум в диапазоне адресов 0-4095.

Ну и /proc/xxxx/maps в помощь. Минус в том, что за все операционные системы ручаться нельзя, да и непонятно, что там на встраиваемых системах. На 64-разрядной машине виртуальная область памяти вообще содержит массу «дырок»:
Скрытый текст
$ sudo pmap `/usr/bin/pgrep X`
7287:   /etc/X11/X :0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt1 -novtswitch
0000000000400000   2032K r-x--  /usr/bin/Xorg
00000000007fb000      8K r----  /usr/bin/Xorg
00000000007fd000     48K rw---  /usr/bin/Xorg
0000000000809000     64K rw---    [ anon ]
0000000000dd3000  87424K rw---    [ anon ]
00007f6f76c5f000   4096K rw-s-    [ shmid=0x3aa00022 ]
00007f6f770df000    512K rw-s-    [ shmid=0x3ab4001b ]
00007f6f7715f000    384K rw-s-    [ shmid=0x3a9b001e ]
00007f6f771bf000   1072K rw-s-    [ shmid=0x3a9a801f ]
00007f6f772cb000    384K rw-s-    [ shmid=0x3a99001d ]
00007f6f7732b000   8476K rw-s-    [ shmid=0x3a97001a ]
00007f6f77b72000    384K rw-s-    [ shmid=0x3a8a000d ]
00007f6f77bf2000    384K rw-s-    [ shmid=0x3a97801c ]
00007f6f77c52000    384K rw-s-    [ shmid=0x3a900019 ]
00007f6f77cb2000    384K rw-s-    [ shmid=0x3a830018 ]
00007f6f77d12000   4096K rw-s-    [ shmid=0x3a828017 ]
00007f6f78112000    512K rw-s-    [ shmid=0x3a820016 ]
00007f6f78192000    384K rw-s-    [ shmid=0x3a808015 ]
00007f6f781f2000    384K rw-s-    [ shmid=0x3a800013 ]
00007f6f78252000    384K rw-s-    [ shmid=0x3a7f000e ]
00007f6f782b2000    512K rw-s-    [ shmid=0x3a7b0012 ]
00007f6f78332000    384K rw-s-    [ shmid=0x3a798010 ]
00007f6f783b2000    384K rw-s-    [ shmid=0x3a8e8014 ]
00007f6f78412000    384K rw-s-    [ shmid=0x3a7d800b ]
00007f6f78472000    384K rw-s-    [ shmid=0x3a768009 ]
00007f6f784d2000    512K rw-s-    [ shmid=0x3a75800c ]
00007f6f78572000    512K rw-s-    [ shmid=0x3ab48021 ]
00007f6f785f2000    384K rw-s-    [ shmid=0x3a94000f ]
00007f6f78652000    384K rw-s-    [ shmid=0x3a73800a ]
00007f6f786b2000    384K rw-s-    [ shmid=0x3a728008 ]
00007f6f78712000    512K rw-s-    [ shmid=0x3a720007 ]
00007f6f78792000   9004K rw---    [ anon ]
00007f6f7905d000    384K rw-s-    [ shmid=0x3a6f8006 ]
00007f6f790bd000  18008K rw---    [ anon ]
00007f6f7a253000    384K rw-s-    [ shmid=0x3a6c8002 ]
00007f6f7a2b3000     48K r-x--  /usr/lib64/libnss_files-2.18.so
00007f6f7a2bf000   2044K -----  /usr/lib64/libnss_files-2.18.so
00007f6f7a4be000      4K r----  /usr/lib64/libnss_files-2.18.so
00007f6f7a4bf000      4K rw---  /usr/lib64/libnss_files-2.18.so
00007f6f7a4e1000     48K r-x--  /usr/lib64/xorg/modules/input/evdev_drv.so
00007f6f7a4ed000   2044K -----  /usr/lib64/xorg/modules/input/evdev_drv.so
00007f6f7a6ec000      4K r----  /usr/lib64/xorg/modules/input/evdev_drv.so
00007f6f7a6ed000      4K rw---  /usr/lib64/xorg/modules/input/evdev_drv.so
00007f6f7a6fe000    788K rw-s-  /dev/nvidia0
00007f6f7a7c3000   8192K rw-s-  /dev/nvidia0
00007f6f7afc3000    188K r-x--  /usr/lib64/xorg/modules/libwfb.so
00007f6f7aff2000   2044K -----  /usr/lib64/xorg/modules/libwfb.so
00007f6f7b1f1000      4K r----  /usr/lib64/xorg/modules/libwfb.so
00007f6f7b1f2000      4K rw---  /usr/lib64/xorg/modules/libwfb.so
00007f6f7b1f3000    144K r-x--  /usr/lib64/xorg/modules/libfb.so
00007f6f7b217000   2044K -----  /usr/lib64/xorg/modules/libfb.so
00007f6f7b416000      4K r----  /usr/lib64/xorg/modules/libfb.so
00007f6f7b417000      4K rw---  /usr/lib64/xorg/modules/libfb.so
00007f6f7b418000   7156K r-x--  /usr/lib64/nvidia-current/xorg/nvidia_drv.so
00007f6f7bb15000   2048K -----  /usr/lib64/nvidia-current/xorg/nvidia_drv.so
00007f6f7bd15000    784K rw---  /usr/lib64/nvidia-current/xorg/nvidia_drv.so
00007f6f7bdd9000    444K rw---    [ anon ]
00007f6f7be48000  28064K r-x--  /usr/lib64/nvidia-current/libnvidia-glcore.so.331.113
00007f6f7d9b0000   2044K -----  /usr/lib64/nvidia-current/libnvidia-glcore.so.331.113
00007f6f7dbaf000  10796K rwx--  /usr/lib64/nvidia-current/libnvidia-glcore.so.331.113
00007f6f7e63a000    116K rwx--    [ anon ]
00007f6f7e657000     12K r-x--  /usr/lib64/nvidia-current/tls/libnvidia-tls.so.331.113
00007f6f7e65a000   2044K -----  /usr/lib64/nvidia-current/tls/libnvidia-tls.so.331.113
00007f6f7e859000      4K rw---  /usr/lib64/nvidia-current/tls/libnvidia-tls.so.331.113
00007f6f7e85a000   9480K r-x--  /usr/lib64/nvidia-current/xorg/libglx.so.331.113
00007f6f7f19c000   2048K -----  /usr/lib64/nvidia-current/xorg/libglx.so.331.113
00007f6f7f39c000   2404K rwx--  /usr/lib64/nvidia-current/xorg/libglx.so.331.113
00007f6f7f5f5000     16K rwx--    [ anon ]
00007f6f7f5f9000     16K r-x--  /usr/lib64/xorg/modules/drivers/v4l_drv.so
00007f6f7f5fd000   2044K -----  /usr/lib64/xorg/modules/drivers/v4l_drv.so
00007f6f7f7fc000      4K r----  /usr/lib64/xorg/modules/drivers/v4l_drv.so
00007f6f7f7fd000      4K rw---  /usr/lib64/xorg/modules/drivers/v4l_drv.so
00007f6f7f7fe000     84K r-x--  /usr/lib64/libgcc_s-4.8.2.so.1
00007f6f7f813000   2044K -----  /usr/lib64/libgcc_s-4.8.2.so.1
00007f6f7fa12000      4K r----  /usr/lib64/libgcc_s-4.8.2.so.1
00007f6f7fa13000      4K rw---  /usr/lib64/libgcc_s-4.8.2.so.1
00007f6f7fa14000    404K r-x--  /usr/lib64/libpcre.so.1.2.1
00007f6f7fa79000   2044K -----  /usr/lib64/libpcre.so.1.2.1
00007f6f7fc78000      4K r----  /usr/lib64/libpcre.so.1.2.1
00007f6f7fc79000      4K rw---  /usr/lib64/libpcre.so.1.2.1
00007f6f7fc7a000    128K r-x--  /usr/lib64/libgraphite2.so.3.0.1
00007f6f7fc9a000   2044K -----  /usr/lib64/libgraphite2.so.3.0.1
00007f6f7fe99000      8K r----  /usr/lib64/libgraphite2.so.3.0.1
00007f6f7fe9b000      4K rw---  /usr/lib64/libgraphite2.so.3.0.1
00007f6f7fe9c000   1016K r-x--  /usr/lib64/libglib-2.0.so.0.3800.2
00007f6f7ff9a000   2044K -----  /usr/lib64/libglib-2.0.so.0.3800.2
00007f6f80199000      4K r----  /usr/lib64/libglib-2.0.so.0.3800.2
00007f6f8019a000      4K rw---  /usr/lib64/libglib-2.0.so.0.3800.2
00007f6f8019b000      4K rw---    [ anon ]
00007f6f8019c000    324K r-x--  /usr/lib64/libharfbuzz.so.0.922.0
00007f6f801ed000   2048K -----  /usr/lib64/libharfbuzz.so.0.922.0
00007f6f803ed000      4K r----  /usr/lib64/libharfbuzz.so.0.922.0
00007f6f803ee000      4K rw---  /usr/lib64/libharfbuzz.so.0.922.0
00007f6f803ef000    376K r-x--  /usr/lib64/libpng16.so.16.16.0
00007f6f8044d000   2044K -----  /usr/lib64/libpng16.so.16.16.0
00007f6f8064c000      4K r----  /usr/lib64/libpng16.so.16.16.0
00007f6f8064d000      4K rw---  /usr/lib64/libpng16.so.16.16.0
00007f6f8064e000     24K r-x--  /usr/lib64/libfontenc.so.1.0.0
00007f6f80654000   2044K -----  /usr/lib64/libfontenc.so.1.0.0
00007f6f80853000      4K r----  /usr/lib64/libfontenc.so.1.0.0
00007f6f80854000      4K rw---  /usr/lib64/libfontenc.so.1.0.0
00007f6f80855000      4K rw---    [ anon ]
00007f6f80856000     60K r-x--  /usr/lib64/libbz2.so.1.0.6
00007f6f80865000   2044K -----  /usr/lib64/libbz2.so.1.0.6
00007f6f80a64000      4K r----  /usr/lib64/libbz2.so.1.0.6
00007f6f80a65000      4K rw---  /usr/lib64/libbz2.so.1.0.6
00007f6f80a66000    604K r-x--  /usr/lib64/libfreetype.so.6.11.3
00007f6f80afd000   2044K -----  /usr/lib64/libfreetype.so.6.11.3
00007f6f80cfc000     24K r----  /usr/lib64/libfreetype.so.6.11.3
00007f6f80d02000      4K rw---  /usr/lib64/libfreetype.so.6.11.3
00007f6f80d03000     96K r-x--  /usr/lib64/libz.so.1.2.8
00007f6f80d1b000   2048K -----  /usr/lib64/libz.so.1.2.8
00007f6f80f1b000      4K r----  /usr/lib64/libz.so.1.2.8
00007f6f80f1c000      4K rw---  /usr/lib64/libz.so.1.2.8
00007f6f80f1d000     28K r-x--  /usr/lib64/librt-2.18.so
00007f6f80f24000   2044K -----  /usr/lib64/librt-2.18.so
00007f6f81123000      4K r----  /usr/lib64/librt-2.18.so
00007f6f81124000      4K rw---  /usr/lib64/librt-2.18.so
00007f6f81125000   1712K r-x--  /usr/lib64/libc-2.18.so
00007f6f812d1000   2044K -----  /usr/lib64/libc-2.18.so
00007f6f814d0000     16K r----  /usr/lib64/libc-2.18.so
00007f6f814d4000      8K rw---  /usr/lib64/libc-2.18.so
00007f6f814d6000     16K rw---    [ anon ]
00007f6f814da000   1032K r-x--  /usr/lib64/libm-2.18.so
00007f6f815dc000   2044K -----  /usr/lib64/libm-2.18.so
00007f6f817db000      4K r----  /usr/lib64/libm-2.18.so
00007f6f817dc000      4K rw---  /usr/lib64/libm-2.18.so
00007f6f817dd000     20K r-x--  /usr/lib64/libXdmcp.so.6.0.0
00007f6f817e2000   2044K -----  /usr/lib64/libXdmcp.so.6.0.0
00007f6f819e1000      4K r----  /usr/lib64/libXdmcp.so.6.0.0
00007f6f819e2000      4K rw---  /usr/lib64/libXdmcp.so.6.0.0
00007f6f819e3000      8K r-x--  /usr/lib64/libXau.so.6.0.0
00007f6f819e5000   2048K -----  /usr/lib64/libXau.so.6.0.0
00007f6f81be5000      4K r----  /usr/lib64/libXau.so.6.0.0
00007f6f81be6000      4K rw---  /usr/lib64/libXau.so.6.0.0
00007f6f81be7000    236K r-x--  /usr/lib64/libXfont.so.1.4.1
00007f6f81c22000   2048K -----  /usr/lib64/libXfont.so.1.4.1
00007f6f81e22000      4K r----  /usr/lib64/libXfont.so.1.4.1
00007f6f81e23000      8K rw---  /usr/lib64/libXfont.so.1.4.1
00007f6f81e25000    652K r-x--  /usr/lib64/libpixman-1.so.0.32.4
00007f6f81ec8000   2048K -----  /usr/lib64/libpixman-1.so.0.32.4
00007f6f820c8000     28K r----  /usr/lib64/libpixman-1.so.0.32.4
00007f6f820cf000      4K rw---  /usr/lib64/libpixman-1.so.0.32.4
00007f6f820d0000     44K r-x--  /usr/lib64/libdrm.so.2.4.0
00007f6f820db000   2044K -----  /usr/lib64/libdrm.so.2.4.0
00007f6f822da000      4K r----  /usr/lib64/libdrm.so.2.4.0
00007f6f822db000      4K rw---  /usr/lib64/libdrm.so.2.4.0
00007f6f822dc000     96K r-x--  /usr/lib64/libpthread-2.18.so
00007f6f822f4000   2044K -----  /usr/lib64/libpthread-2.18.so
00007f6f824f3000      4K r----  /usr/lib64/libpthread-2.18.so
00007f6f824f4000      4K rw---  /usr/lib64/libpthread-2.18.so
00007f6f824f5000     16K rw---    [ anon ]
00007f6f824f9000     32K r-x--  /usr/lib64/libpciaccess.so.0.11.1
00007f6f82501000   2044K -----  /usr/lib64/libpciaccess.so.0.11.1
00007f6f82700000      4K r----  /usr/lib64/libpciaccess.so.0.11.1
00007f6f82701000      4K rw---  /usr/lib64/libpciaccess.so.0.11.1
00007f6f82702000     12K r-x--  /usr/lib64/libdl-2.18.so
00007f6f82705000   2044K -----  /usr/lib64/libdl-2.18.so
00007f6f82904000      4K r----  /usr/lib64/libdl-2.18.so
00007f6f82905000      4K rw---  /usr/lib64/libdl-2.18.so
00007f6f82906000   1884K r-x--  /usr/lib64/libcrypto.so.1.0.0
00007f6f82add000   2048K -----  /usr/lib64/libcrypto.so.1.0.0
00007f6f82cdd000    104K r----  /usr/lib64/libcrypto.so.1.0.0
00007f6f82cf7000     44K rw---  /usr/lib64/libcrypto.so.1.0.0
00007f6f82d02000     16K rw---    [ anon ]
00007f6f82d06000     64K r-x--  /usr/lib64/libudev.so.1.4.0
00007f6f82d16000   2048K -----  /usr/lib64/libudev.so.1.4.0
00007f6f82f16000      4K r----  /usr/lib64/libudev.so.1.4.0
00007f6f82f17000      4K rw---  /usr/lib64/libudev.so.1.4.0
00007f6f82f18000    120K r-x--  /usr/lib64/ld-2.18.so
00007f6f82f63000      4K rw-s-  /dev/nvidia0
00007f6f82f64000      4K rw-s-  /dev/nvidia0
00007f6f82f65000      4K rw-s-  /dev/nvidia0
00007f6f82f66000      4K rw-s-  /dev/nvidia0
00007f6f82f67000      4K rw-s-  /dev/nvidia0
00007f6f82f68000      4K rw-s-  /dev/nvidia0
00007f6f82f69000      4K rw-s-  /dev/nvidia0
00007f6f82f6a000      4K rw-s-  /dev/nvidia0
00007f6f82f6b000      4K rw-s-  /dev/nvidia0
00007f6f82f6c000      4K rw-s-  /dev/nvidia0
00007f6f82f6d000    384K rw-s-    [ shmid=0x3a6f0005 ]
00007f6f82fcd000    384K rw-s-    [ shmid=0x3a6e8004 ]
00007f6f8302d000    384K rw-s-    [ shmid=0x3a6e0003 ]
00007f6f8308d000     64K rw-s-  /dev/nvidia0
00007f6f8309d000    128K rw-s-  /dev/nvidia0
00007f6f830bd000    348K rw---    [ anon ]
00007f6f83114000      4K rw-s-  /dev/nvidia0
00007f6f83115000      4K rw-s-  /dev/nvidia0
00007f6f83116000      4K rw-s-  /dev/nvidia0
00007f6f83117000      4K rw-s-  /dev/nvidia0
00007f6f83118000      4K rw-s-  /dev/nvidia0
00007f6f83119000      4K rw-s-  /dev/nvidia0
00007f6f8311a000      4K rw-s-  /dev/nvidia0
00007f6f8311b000      4K rw-s-  /dev/nvidia0
00007f6f8311c000      4K rw-s-  /dev/nvidia0
00007f6f8311d000      4K rw-s-  /dev/nvidia0
00007f6f8311e000      4K rw-s-  /dev/nvidia0
00007f6f8311f000      4K rw-s-  /dev/nvidia0
00007f6f83120000      4K rw-s-  /dev/nvidia0
00007f6f83121000     68K rw-s-  /dev/nvidia0
00007f6f83132000      4K rw-s-  /dev/nvidia0
00007f6f83133000      4K rw-s-  /dev/nvidia0
00007f6f83134000      8K rw---    [ anon ]
00007f6f83136000      4K r----  /usr/lib64/ld-2.18.so
00007f6f83137000      4K rw---  /usr/lib64/ld-2.18.so
00007f6f83138000      4K rw---    [ anon ]
00007fff52412000    356K rw---    [ stack ]
00007fff524b9000      8K r-x--    [ anon ]
ffffffffff600000      4K r-x--    [ anon ]
Оставим невесть куда утекающие 87424K «кучи» на совести разработчиков, и обратим внимание, что ядро оставляет приличные области адресного пространства как «сверху», так и «снизу».
А в жизни обычно приходится ковыряться вот в этом: developer.gnome.org/glib/stable/glib-Error-Reporting.html Т.е. мы имеем: код возврата, указатель на объект, который хотим получить и указатель на объект «Ошибка», если код возврата false, после которого ещё надо память освобождать. Но зато можно передавать произвольные ошибки с произвольными сообщениями об ошибках.
//а где-то выше
#define NULL 42
Вот один из таких случаев, где анализатору не понравился аргумент функции free():

А чем NULL в free не понравился?
Не думал, что в фише такой чудной синтаксис. Т.е. обратная совместимость напрочь отсутствует. Медленнее может быть из-за seq (внешняя команда).

dash быстр, но он требует дедовских методов программирования на шелле, так как по возможностям уступает даже busybox. И тут даже видно, как его обгоняет zsh:

$ time busybox sh  -c 'for i in $(seq 1000000); do [[ "$1" = "123" ]] && echo ok; done'
real	0m3.783s
$ time busybox sh  -c 'for i in $(seq 1000000); do [ "$1" = "123" ] && echo ok; done'
real	0m3.719s
$ time sh  -c 'for i in {1..1000000}; do [[ "$1" = "123" ]] && echo ok; done'
real	0m6.310s
$ time sh  -c 'for i in {1..1000000}; do [ "$1" = "123" ] && echo ok; done'
real	0m10.340s
$ time dash  -c 'for i in $(seq 1000000); do [ "$1" = "123" ] && echo ok; done'
real	0m2.394s
$ time zsh  -c 'for i in {1..1000000}; do [ "$1" = "123" ] && echo ok; done'
real	0m5.541s
$ time zsh  -c 'for i in {1..1000000}; do [[ "$1" = "123" ]] && echo ok; done'
real	0m1.975s

Баш существо загадочное, соглашусь что это builtin (разница с не-builtin налицо), но и не возьмусь объяснить, почему так происходит:
$ time for i in {1..10000}; do [[ "$1" = "123" ]] && echo ok; done
real	0m0.061s
$ time for i in {1..10000}; do [ "$1" = "123" ] && echo ok; done
real	0m0.108s
$ time for i in {1..10000}; do /bin/[ "$1" = "123" ] && echo ok; done
real	0m10.617s
— функция есть не везде (у меня на андроиде busybox, и хотелось бы, чтобы там этот PS1 тоже работал);
— по ссылке — шелл-портянка, у меня всего две строчки, и делают то что надо.

<зануда>По скорости. Во многих «стандартных» скриптах используют синтаксис условий [ ] для совместимости. Совмещать приходится для убунты/дебиана из-за велосипеда под названием dash и для всевозможных бсдей. На деле [ является внешней командой, а [[ — внутренней, благодаря этому отрабатывает намного быстрее. Фича есть в баше и busybox, а больше и не надо.</зануда>
Как раз очень раздражающий факт состоит в том, что стол реагирует ещё до прикосновения. Обратная связь отсутствует практически полностью.

То есть если я хочу паралелльно запустить красивые визуалы и синтез звука, то мне нужен ретранслятор, поскольку если модуль сопряжения принимает TUIO обьект, то допустим Flash визуалы этот обьект уже не видят.

Для этого в ядре Linux есть интересная возможность — reuse сокеты.
В примере на гитхабе в Makefile в CPPFLAGS стоит также добавить -O3, иначе оптимизатор вхолостую работает.

Эх, где вы были, когда я был студентом:)

У меня не странный результат — где-то ошибки округления:

Именно. Мне интересно можно ли какой-то хэш придумать для ускорения подбора слов — что-то вроде фильтра Блума.
Было бы интересно увидеть эффективный алгоритм для составления такого кроссворда:

image
Главное, чтобы эта добрая душа не начала производить с вашего IP деяния, караемые УК РФ, в таком случае ждите гостей в масках.
Греп не обязательно:
^R
PgUp/PgDown
А чтобы команды листались по стрелке вверх, достаточно добавить в bashrc:
#search in history with arrows
bind '"\e[A": history-search-backward' 2>/dev/null
bind '"\e[B": history-search-forward' 2>/dev/null

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность