LINUX.ORG.RU

Сообщения oh-la-la

 

poll внутри ядра

Привет. Суть такова: пытаюсь понять как работает poll в ядре. В целом всё ясно, но есть один момент который не могу отследить.

Например, у нас есть 100 дескрипторов которые юзер хочет пополлить. Ядро начинает бежать по переданным дескрипторам и вызывать fops->poll(), внутри которого драйвер «регистрирует» свои waitqueue_head в полл-таблице (+ poll аллоцирует внутреннюю waitqueue и добавляет ее в переданный waitqueue_head) и возвращает текущую event-mask. Допустим poll уже зарегистрировал 99 дескрипторов и все они не готовы для работы (revents = 0). В это время из другого потока совершилась какая-то операция и первый дескриптор стал готов для работы, т.е. драйвер позвал wake_up на свой waitqueue_head, который поидеи должен разбудить и поллящийся тред, но тред и так не спит, т.к. еще не обработал все дескрипторы. Собственно после этого тред обрабатывает последний дескриптор, тот тоже возвращает 0.

Поидеи poll должен пересканить файлы и вернуть управление юзеру, но судя по коду он отправляется спать. Я что-то упустил и такой кейс как-то отслеживается или на него забивают/он невозможен?

 , ,

oh-la-la
()

Вызов диалога в виджете, созданном делегатом

Привет, суть такова.
Делаю простой property grid (treeview + модель + делегат). Есть несколько пропертей при взаимодействии с которыми нужно вызывать сторонние диалоги. Например, указание пути к файлу или выбор цвета. Но при вызове этого диалога, я так понимаю, происходит потеря фокуса у виджета созданного через QItemDelegate::createEditor и в модель записывается старое значение.

То есть, код такой:

def createEditor(self, parent, option):
    editor = QtGui.QPushButton(parent)
    editor.clicked.connect(self.onButtonClicked)
    return editor

def setEditorData(self, editor, value):
    editor.setText(value)
    self.selectedFile = value

def editorData(self, editor):
    return self.selectedFile

def onButtonClicked(self):
    dialog = QtGui.QFileDialog()
    if dialog.exec_() == QtGui.QDialog.Rejected:
        return 
    self.selectedFile = dialog.selectedFiles()[0]

Подскажите куда копать и как делать правильно.

 

oh-la-la
()

Qt произвольная компоновка доков.

Привет. Суть такова.
В Qt для каждого угла QMainWindow задается какая из DockWidgetArea будет его занимать, при пересечении двух доков (конкретно QMainWindow::setCorner). Можно ли стандартными средствами Qt сделать произвольную компоновку, как это сделано например в эклипсе? Не хотелось бы заниматься переписыванием докинга. Я поискал в интернете, но чего-либо толкового не нашел.
Спасибо.

 

oh-la-la
()

Интервью с инженером Nvidia

-- баян

oh-la-la
()

Нужен property grid

Привет, суть такова.
Есть прога на питоне, написана на PySide. Нужно добавить туда property grid, но хз откуда его взять. Из найденых вариантов есть qtpropertybrowser, правда он какой-то огромный и монструозный и я не знаю как прикрутить это дело к питону (есть какой-то shiboken, но тут нужно курить). Еще есть gtk-property-grid я его еще не использовал, но там всего 4 файла и думаю добавить питон-биндинги будет намного проще.

Вобщем, подскажите, может есть уже готовое решение, а я тут великами занимаюсь? Меня устроит и gtk, гуй там элементарный и переделывается за 30 минут, но лучше Qt.

 , ,

oh-la-la
()

Khronos Group собирает пожелания для OpenGL Next

Вот тут: https://www.khronos.org/surveys/index.php/929633/lang-en
Там короткий опросник и опционально предложения по развитию. Если есть желание как-то повлиять на развитие OpenGL, можно поучаствовать. Наиболее ретивые имеют шанс попать в рассылку glnext, если захотят.

Я написал примерно следующее:

1) Improve debugging and profiling.
Sadly, but today OpenGL platform is fragmented a lot and every vendor develops their own tools and SDK and they mostly lock to a single operating system. And they not good as DirectX tools. I hope in OpenGL Next we will have one good tool maintained by Khronos Group what works across all vendors and major operating systems.
I imagine it as open source tool like QtCreator or Krita. Maybe it is not best programs in the world but a good examples of modularized software. Both programs have little core and all functional is appended with compile-time plugins. So every interesting person from community or vendor will allowed to add features they need.
Look at Crytek Renderdoc or AMD GPU PerfStudio. It is realy good and feature-rich programs. I hope OpenGL Next will have tools like it. But it depends of vendors, if they ready to cooperate and help.
2) Low level stuff.
I'm not guru of AAA level OpenGL development but all this stuff with more explicit control of resources looks interesting. Virtual textures and buffers, persistent mapping, indirect draw, upcoming NVidia's command lists and conservative raster, explicit multisampling locations, AMD's extended stencil ops and atomic counters ops, etc. All of this already included in OpenGL Next, right? Anyway people from Epic Games, Unity and others have more experience with low level graphics programming (PS3, metal, etc) and have better API design ideas.
3) Direct state access.
As in OpenCL. Nuff said.
4) Explicit DMA engine access.
Modern GPU have several DMA engines and in classic OpenGL it depends of implementation is upload/readback data with PBO will use this engines or not. I hope in OpenGL Next we will have API to contol our data transfers.
5) Shading language.
Classic GLSL is not worst language, but good old C99 is better. GPGPU languanges and for example Metal shading language (it's based on C++11 but anyway) from Apple is great step forward.
Offline shader compiler what works acorss all vendors is needed of course.
6) Improve conformance tests.
Piglit-like stuff from Mesa open source drivers what checks every aspect of graphics API and shaders is vital. I heard somewhere what Microsoft have software rasterizer for their DX APIs (don't known is it truth or not) and every vendor compares their implementations with this rasterizer. Once again it good if this tests will available to open source and everyone can contribute to it.
7) No more undefined behavior.
Classic OpenGL have a lot of undefined behaviors and vendors interprets it differently. Specification of OpenGL Next should be interpreted unambiguously.

Thanks for your work!
Да, мой английский не самый крутой. Вобщем, если есть желание дерзайте.

 

oh-la-la
()

openSUSE 13.2 bold в терминале

Привет.
После уставноки сусе 13.2 не работает жирный шрифт в терминале (пробовал xterm и konsole). В старых версиях я ничего не настраивал и все работало из коробки.
Подскажите куда копать?

 

oh-la-la
()

Как называется такой стиль?

oh-la-la
()

Привязать QTimer к потоку визуализации QtQuick

Привет, суть такова. Имеем Qt5 и QtQuick2. Есть класс унаследованный от QQuickView. Нужно как-то запустить таймер, который бы периодически вызывал юзерский слот из потока рендера, чтобы был доступ к OpenGL контексту.

Если создавать таймер в конструкторе, то всё будет работать, но таймер будет вызываться из этого же потока.

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()), Qt::DirectConnection);
timer->start(16);

Если создавать таймер при возникновении сигнала sceneGraphInitialized, то таймер будет вызываться из нужного потока, но только если что-то делать с окном (менять размер например).

QTimer *timer = new QTimer(nullptr);
connect(timer, SIGNAL(timeout()), this, SLOT(updateGL()), Qt::DirectConnection);
timer->setInterval(16);
timer->setSingleShot(false);
timer->moveToThread(QThread::currentThread());
timer->start();

Вероятно я делаю что-то не так? Как будет правильно? Вариант с постоянным дерганьем makeCurrent контекста из разных потоков не очень.

 

oh-la-la
()

Чтение данных произвольного размера в Perl+Swig

Привет. Суть такова.
Есть некая функция, которая ведет себя как read из posix, т.е. для чтения принимает указатель на буфер. POSIX::read в перле умеет увеличивать размер буфера, если он слишком маленький. Как бы мне сделать такую же вещь у себя через Swig? Я прочитал доки, но ничего путного не нашел.

Раньше никогда не писал нативных модулей к перлу, XS не осилил.

 ,

oh-la-la
()

размер картинки в ps2pdf

Суть такова. Есть куча графиков нагенерированных через gnuplot в формате постскрипт. Теперь их все нужно вставить в латех. Я так понял латех не умеет в постскрипт, поэтому конвертирую их через ps2pdf, но на изображении в пдфке получаются много пустого места вокруг графика. Если открывать постскрипт через, например okular, то график полностью заполняет лист.

Okular: http://i.imgur.com/ddajPJL.png
ps2pdf: http://i.imgur.com/LspfE9P.png

Как сделать также как в okular-е? В гугле ничего не нашел.

 

oh-la-la
()

Проверить работу последовательного порта

Привет. Не работает порт распаянный на материнке, не могу понять в чем причина. Есть PCI карта с двумя RS-232, там всё OK, но нужен еще один порт.

$ dmesg |grep serial
[    1.330044] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A

Вот тут мне не нравятся две строчки с ttyS0 и ttyS1. Разные адреса и прерывания. В биосе стоит SerialPort1 = 0x3f8 IRQ 4. Я пробовал юзать оба порта, но без результатно.

$ dmesg |grep tty
[    0.000000] console [tty0] enabled
[    1.309295] 00:08: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[    1.330044] serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
[    1.352441] 0000:01:07.0: ttyS4 at I/O 0xcf00 (irq = 19) is a ST16650V2
[    1.374406] 0000:01:07.1: ttyS5 at I/O 0xce00 (irq = 16) is a ST16650V2

$ setserial -g /dev/ttyS*
/dev/ttyS0, UART: 16550A, Port: 0x03f8, IRQ: 4
/dev/ttyS1, UART: 16550A, Port: 0x02f8, IRQ: 3
/dev/ttyS2, UART: unknown, Port: 0x03e8, IRQ: 4
/dev/ttyS3, UART: unknown, Port: 0x02e8, IRQ: 3
/dev/ttyS4, UART: 16650V2, Port: 0xcf00, IRQ: 19
/dev/ttyS5, UART: 16650V2, Port: 0xce00, IRQ: 16
/dev/ttyS6, UART: unknown, Port: 0x0000, IRQ: 0
/dev/ttyS7, UART: unknown, Port: 0x0000, IRQ: 0
$ cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:16550A port:000002F8 irq:3 tx:0 rx:0 CTS|DSR|CD|RI
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
4: uart:ST16650V2 port:0000CF00 irq:19 tx:19 rx:10
5: uart:ST16650V2 port:0000CE00 irq:16 tx:19 rx:0
6: uart:unknown port:00000000 irq:0
7: uart:unknown port:00000000 irq:0
$ ls -la /dev/ttyS*
crw-rw---- 1 root dialout 4, 64 Apr  3 11:38 /dev/ttyS0
crw-rw---- 1 root dialout 4, 65 Apr  3 11:38 /dev/ttyS1
crw-rw---- 1 root dialout 4, 66 Apr  3 11:38 /dev/ttyS2
crw-rw---- 1 root dialout 4, 67 Apr  3 11:38 /dev/ttyS3
crw-rw---- 1 root dialout 4, 68 Apr  3 11:38 /dev/ttyS4
crw-rw---- 1 root dialout 4, 69 Apr  3 11:38 /dev/ttyS5
crw-rw---- 1 root dialout 4, 70 Apr  3 11:38 /dev/ttyS6
crw-rw---- 1 root dialout 4, 71 Apr  3 11:38 /dev/ttyS7
$ cat /usr/src/linux-obj/i586/desktop/.config |grep SERIAL
CONFIG_PARPORT_SERIAL=m
CONFIG_MOUSE_SERIAL=m
CONFIG_SERIAL_NONSTANDARD=y
CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
CONFIG_SERIAL_8250_PNP=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_DMA=y
CONFIG_SERIAL_8250_PCI=y
CONFIG_SERIAL_8250_CS=m
CONFIG_SERIAL_8250_NR_UARTS=16
CONFIG_SERIAL_8250_RUNTIME_UARTS=8
# CONFIG_SERIAL_8250_EXTENDED is not set
CONFIG_SERIAL_8250_DW=m
# CONFIG_SERIAL_KGDB_NMI is not set
# CONFIG_SERIAL_MFD_HSU is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_JSM=m
# CONFIG_SERIAL_SCCNXP is not set
CONFIG_SERIAL_TIMBERDALE=m
CONFIG_SERIAL_ALTERA_JTAGUART=m
CONFIG_SERIAL_ALTERA_UART=m
CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200
CONFIG_SERIAL_PCH_UART=m
# CONFIG_SERIAL_ARC is not set
CONFIG_SERIAL_RP2=m
CONFIG_SERIAL_RP2_NR_UARTS=32
CONFIG_SERIAL_FSL_LPUART=m
CONFIG_SND_SERIAL_U16550=m
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_AIRCABLE=m
CONFIG_USB_SERIAL_ARK3116=m
CONFIG_USB_SERIAL_BELKIN=m
CONFIG_USB_SERIAL_CH341=m
CONFIG_USB_SERIAL_WHITEHEAT=m
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
CONFIG_USB_SERIAL_CP210X=m
CONFIG_USB_SERIAL_CYPRESS_M8=m
CONFIG_USB_SERIAL_EMPEG=m
CONFIG_USB_SERIAL_FTDI_SIO=m
CONFIG_USB_SERIAL_FUNSOFT=m
CONFIG_USB_SERIAL_VISOR=m
CONFIG_USB_SERIAL_IPAQ=m
CONFIG_USB_SERIAL_IR=m
CONFIG_USB_SERIAL_EDGEPORT=m
CONFIG_USB_SERIAL_EDGEPORT_TI=m
CONFIG_USB_SERIAL_F81232=m
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m
CONFIG_USB_SERIAL_IUU=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_KOBIL_SCT=m
CONFIG_USB_SERIAL_MCT_U232=m
CONFIG_USB_SERIAL_METRO=m
CONFIG_USB_SERIAL_MOS7720=m
CONFIG_USB_SERIAL_MOS7715_PARPORT=y
CONFIG_USB_SERIAL_MOS7840=m
CONFIG_USB_SERIAL_MOTOROLA=m
CONFIG_USB_SERIAL_NAVMAN=m
CONFIG_USB_SERIAL_PL2303=m
CONFIG_USB_SERIAL_OTI6858=m
CONFIG_USB_SERIAL_QCAUX=m
CONFIG_USB_SERIAL_QUALCOMM=m
CONFIG_USB_SERIAL_SPCP8X5=m
CONFIG_USB_SERIAL_HP4X=m
CONFIG_USB_SERIAL_SAFE=m
CONFIG_USB_SERIAL_SAFE_PADDED=y
CONFIG_USB_SERIAL_SIEMENS_MPI=m
CONFIG_USB_SERIAL_SIERRAWIRELESS=m
CONFIG_USB_SERIAL_SYMBOL=m
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m
CONFIG_USB_SERIAL_WWAN=m
CONFIG_USB_SERIAL_OPTION=m
CONFIG_USB_SERIAL_OMNINET=m
CONFIG_USB_SERIAL_OPTICON=m
CONFIG_USB_SERIAL_VIVOPAY_SERIAL=m
CONFIG_USB_SERIAL_XSENS_MT=m
CONFIG_USB_SERIAL_ZIO=m
CONFIG_USB_SERIAL_WISHBONE=m
CONFIG_USB_SERIAL_ZTE=m
CONFIG_USB_SERIAL_SSU100=m
CONFIG_USB_SERIAL_QT2=m
CONFIG_USB_SERIAL_FLASHLOADER=m
CONFIG_USB_SERIAL_SUUNTO=m
CONFIG_USB_SERIAL_DEBUG=m
CONFIG_USB_SERIAL_QUATECH2=m
CONFIG_LIRC_SERIAL=m
CONFIG_LIRC_SERIAL_TRANSMITTER=y
CONFIG_FIREWIRE_SERIAL=m
CONFIG_SERIAL_IPOCTAL=m
CONFIG_KGDB_SERIAL_CONSOLE=m

Ось openSUSE 13.1. Дома такая же система стоит на ноуте, там /dev/ttyS0 работает как ожидается. Рядом есть комп с Убунтой, порт на материнке тоже не работает. До этого с такой проблемой не сталкивался.

oh-la-la
()

AMD хочет сделать единый модуль ядра для блоба и месы

!Ъ: http://www.phoronix.com/scan.php?page=article&item=amd_catalyst_kernel&am...

Сабж. На сколько я понял хотят написать и протолкнуть модуль в апстрим ядра. Каталист останется юзерспейным блобом. Меса вероятно поимеет ништяков со всего этого. Ну и можно будет юзать принципиально новые диспейные серверы, как с каталистом, так и с месой.

Но пока это всё «инсайдерская инфа» с GDC.

 , ,

oh-la-la
()

Прикрутить gcc к flycheck

Потихоньку перебираюсь на емакс. Помогите подключить gcc к flycheck, уже весь вечер бьюсь.
В конфиге есть такое:

(flycheck-define-checker c-gcc
    :command ("gcc"
              "-Wall"
              "-Wextra"
              "-fsyntax-only"
              source-inplace)
    :error-patterns
        ((warning line-start (file-name) ":" line ":" column
                  ": warning: " (message) line-end)
        (error line-start (file-name) ":" line ":" column
               ": error: " (message) line-end))
    :modes (c-mode))

(add-to-list 'flycheck-checkers 'c-gcc)
В итоге при загрузке емакса получаю:
progn: Missing :command


На гитхабе нашел (https://github.com/jedrz/.emacs.d/blob/master/setup-flycheck.el) такую вещь:

  (defmacro flycheck-define-clike-checker (name command modes)
    `(flycheck-define-checker ,(intern (format "%s" name))
       ,(format "A %s checker using %s" name (car command))
       :command (,@command source-inplace)
       :error-patterns
       ((warning line-start (file-name) ":" line ":" column
                 ": warning: " (message) line-end)
        (error line-start (file-name) ":" line ":" column
               ": error: " (message) line-end))
       :modes ',modes))
  (flycheck-define-clike-checker c-gcc
                                 ("gcc" "-fsyntax-only" "-Wall" "-Wextra")
                                 c-mode)
  (add-to-list 'flycheck-checkers 'c-gcc)
Оно работает. В чем мой косяк и почему не работает первый вариант?

 , ,

oh-la-la
()

Убрать префикс у объектников

Есть такой makefile.am:

ACLOCAL_AMFLAGS = -I m4

lib_LTLIBRARIES = libxxx.la

libxxx_la_CXXFLAGS = $(PTHREAD_CFLAGS)
libxxx_la_LDFLAGS  = $(PTHREAD_LIBS)
libxxx_la_SOURCES  = \
    lib/xxx.cpp \
    lib/xxx.h

bin_PROGRAMS = prog

prog_CXXFLAGS = $(PTHREAD_CFLAGS)
prog_LDFLAGS  = $(PTHREAD_LIBS)
prog_LDADD    = libxxx.la
prog_SOURCES  = \
    src/main.cpp

При компилянии имеем такой выхлоп:

  CXX      lib/libxxx_la-xxx.lo
  CXXLD    libxxx.la
  CXX      src/prog-main.o
  CXXLD    prog

Можно ли как-то убрать вот эти префиксы у объектных файлов (libxxx_la- и prog-), чтобы имена объектников совпадали с именами сорцов?

 ,

oh-la-la
()

Скрывающаяся панель для Qt

Нужна панелька, типа дока, как в Kate, которая при некотором значении ширины, просто скрывается. Я так понял это KDEшный виджет.

Вот такая (слева): http://storage1.static.itmages.ru/i/11/0517/h_1305646325_a0f9f8c1cf.png

Есть что-то похожее для кутей или как хотябы называется этот виджет в кедах? Что-то ничего не нахожу толком.

 ,

oh-la-la
()

autotools автоматический список makefile

Возможно ли сделать, без сторонних скриптов, автоматические добавление мейкфайлов в список AC_CONFIG_FILES? Т.е. как-то так:

AC_CONFIG_FILES([`find -name *.am | sed 's/\(.*\)\..*/\1/'`])

Я знаю можно в скрипте генерить нужный выхлоп, а потом подключать в configure.ac через m4_include, но хотелось бы средствами автоконфа обойтись.

 

oh-la-la
()

Выбор окна под указателем

Суть такова: нужно получить id окна, жмахнув по нему мышкой. Возможно ли? Я пробовал код который использует transset, но id окна возвращается некорректный (не совпадает с выводом xlsclients -l), хотя сам transset работает правильно (?!).

XEvent xev;
Window target = None;
int buttons   = 0;

XGrabPointer(...);
while((target == None) || (buttons != 0))
{

    XAllowEvents(dpy, SyncPointer, CurrentTime);
    XWindowEvent(dpy, root, ButtonPressMask|ButtonReleaseMask, &xev);
    switch(xev.type)
    {
    case ButtonPress:
        if(target == None) target = xev.xbutton.subwindow;
        buttons++;
        break;

    case ButtonRelease:
        if(buttons > 0) buttons--;
        break;
    }
}
XUngrabPointer(...);

Все что нужно это послать указанному окну сообщение с переключением в фуллскрин.

 

oh-la-la
()

Xrandr, Xinerama, Twinview, Eyefinity и fullscreen

Всем привет. У меня есть пара вопросов по поводу xlib и многомониторных конфигураций:

1) Я правильно понимаю, что при настройки виртульного рабочего стола (на два монитора, например) через Xrandr для детекта размеров используется Xinerama ( XineramaQueryScreens(...) )?

2) Как обстоят дела с Eyefinity и Twinview? Виртульный скрин там тоже детектится с помощью Xinerama? У меня нет возможности проверить, т.к. нету ни того, ни другого.

3) При посылании окну атома _NET_WM_STATE_FULLSCREEN, как узнать положение и размеры окна в фуллскрине? Например, в опенбоксе окно открывается только на один монитор (возможно регулируется в конфиге), а в KWin в настройках есть галка, позволяя открывать окно либо на один монитор, либо на все сразу.

 eyefinity, , , ,

oh-la-la
()

RSS подписка на новые темы