Skip to contentSkip to conversation

AHCI and add_disk_randomness()

DISCUSSION Marek Podmaka 3 participants 3 messages Nov 15, 2006 – Nov 20, 2006 libata

lore
Share & tools
lore
#0 lore raw

Hello,

I have server with Intel 5000V motherboard with integrated AHCI SATA controller. It works well with kernel 2.6.18.2. But I have problem with little entropy available and I'm not sure if one of the reasons is that AHCI driver does not use add_disk_randomness() to contribute to the kernel entropy pool.

I'm not very skilled on kernel "hacking"... I tried finding where this is called (it's defined in drivers/char/random.c and used for example in Comapaq SmartArray driver in drivers/block/cciss.c). For the SCSI part, I found it in scsi_lib.c, but I was not able to determine if this is actually used by ahci/libata drivers.

If not, would it be possible to implement it? I tried to figure out where to call it by looking at cciss.c, but it seems that this is totally different case, at least for me. I don't know where to add it, because its parameter is struct gendisk *disk and didn't find it used anywhere in ahci or libata.

Signature · 1 line
  bYE, Marki
#1 lore raw
Quoted 14 lines · Marek Podmaka

Hello,

I have server with Intel 5000V motherboard with integrated AHCI SATA controller. It works well with kernel 2.6.18.2. But I have problem with little entropy available and I'm not sure if one of the reasons is that AHCI driver does not use add_disk_randomness() to contribute to the kernel entropy pool.

I'm not very skilled on kernel "hacking"... I tried finding where this is called (it's defined in drivers/char/random.c and used for example in Comapaq SmartArray driver in drivers/block/cciss.c). For the SCSI part, I found it in scsi_lib.c, but I was not able to determine if this is actually used by ahci/libata drivers.

Quoted 5 lines

If not, would it be possible to implement it? I tried to figure out where to call it by looking at cciss.c, but it seems that this is totally different case, at least for me. I don't know where to add it, because its parameter is struct gendisk *disk and didn't find it used anywhere in ahci or libata.

Since ahci attaches its devices through the scsi layer, add_disk_randomness() will get called from scsi_end_request() like for any other scsi controller.

Signature · 1 line
Jens Axboe
#2 lore raw
In reply to Marek Podmaka
Quoted 14 lines · Marek Podmaka

Hello,

I have server with Intel 5000V motherboard with integrated AHCI SATA controller. It works well with kernel 2.6.18.2. But I have problem with little entropy available and I'm not sure if one of the reasons is that AHCI driver does not use add_disk_randomness() to contribute to the kernel entropy pool.

I'm not very skilled on kernel "hacking"... I tried finding where this is called (it's defined in drivers/char/random.c and used for example in Comapaq SmartArray driver in drivers/block/cciss.c). For the SCSI part, I found it in scsi_lib.c, but I was not able to determine if this is actually used by ahci/libata drivers.

Quoted 5 lines

If not, would it be possible to implement it? I tried to figure out where to call it by looking at cciss.c, but it seems that this is totally different case, at least for me. I don't know where to add it, because its parameter is struct gendisk *disk and didn't find it used anywhere in ahci or libata.

libata currently attaches as a SCSI device and SCSI midlayer invokes add_disk_randomness() in scsi_enq_request(). So, ahci is already contributing to entropy pool. cciss needs explicit call to the function because it's a separate block driver and has no one above to handle it automatically. You probably need to look for another source if you need more.

Signature · 1 line
tejun