トップ «前の日記(2006年02月07日) 最新 次の日記(2006年02月09日)» 編集
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|10|12|
2009|02|03|06|07|10|11|12|
2010|01|02|03|04|07|09|10|11|12|
2011|01|03|04|05|06|07|08|10|
2012|01|06|08|09|10|12|
2013|01|02|03|04|07|09|11|12|
2014|01|03|04|05|06|09|
2015|04|
2016|01|08|
ここは旧えびめもです。えびめも2に移行します(2016/12/1)

2006年02月08日

SH Linux

Linux PCMCIAがIRQを動的に割り当てるアルゴリズム.
drivers/pcmcia/pcmcia_resource.c
  int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req){
  :中略
  for (try = 0; try < 64; try++){  //なんで64までなのかは知らん
     irq = try % 32;               //irq_mask が int 32bitだから
     ret=request_irq(irq, 略);           してみてエラーが出なかったirqを使うことにする
なんて強引なんだ。その作戦(アルゴリズム)はPCでしか通用しないじゃん。実際SH3ではIRQ0〜IRQ15は未使用なのでrequest_irq()が全てエラーとなり動的割り当てに失敗する。対策としては、若いIRQ番号をdummy_irq_typeとかにして、仮にenable_irq()が通るようにして、irq_demux()を使って実際のIRQ番号にとばす。。。をやってみたけどスマートさに欠けるのでやめた。irq_demux()大嫌いだし。