Обновление shared image на странице RTEM.
Поправлен косяк в KMON который обрушивает систему при попытке выгрузить foreground job.
Проблема сама по себе не относится к RTEM, просто дошли руки поковырять...
DEC немного перемудрил.
При выгрузке FG job, KMON пытается отменить назначения ему устройств в личное пользование.
При этом тупо сканится таблица $OWNER без всяких проверок загружен драйвер или нет.
Для простого драйвера такой способ работает - просто лишняя работа получается, а для драйвера с поддержкой 64 устройств используется дополнительная таблица которой не существует если драйвер не загружен в память (или, к слову, если драйвер при загрузке сам не сделал на нее ссылку). Как результат - вместо таблицы под раздачу попадают вектора устройств.
Я не стал возиться с проверкой что драйвер загружен - просто добавил проверку что расширенной таблицы нет.Код:OINST MOV .$OWNER,R0,* ;Start at the beginning of the $OWNER table MOV #<$SLOT>,R2 ;Get number of device slots for loop count 10$: .IF NE UNI$64 CMP @R0,#<OWN.EX> ;Is this an extended unit entry? BNE 20$ ;No MOV #<32.>,R5 ;R5 = # bytes to check (extended ownership) MOV R0,-(SP) ;Save R0 pointer into real $OWNER table MOV 2(R0),R0 ;Point to the extended ownership table CALL 40$ ;Clean out the extended ownership table MOV (SP)+,R0 ;Restore R0 CMP (R0)+,(R0)+ ;Point R0 at next entry BR 30$ ;And move onto next entry
Теперь все выглядит так:
А было так:Код:.FR FJTST F> *** EXIT *** B> .UNL F .
Ну и понятно, что проблема проявляется только в системах, собранных с расшиненными унитами и таблицей $OWNER. Если в такой системе загрузить в память драйверы которые поддерживают расширенные номера (обычно это LD и DU), то проблема тоже не проявляется.Код:.FR FJTST F> *** EXIT *** B> .UNL F 02:56:13 Task "RTET55" terminated SST abort. Bad stack R0=110234 R1=000000 R2=000000 R3=000003 R4=140006 R5=137600 SP=177764 PC=140476 PS=170005 >




Ответить с цитированием