AHCI and add_disk_randomness()
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
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.cand used for example in Comapaq SmartArray driver indrivers/block/cciss.c). For the SCSI part, I found it inscsi_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
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.cand used for example in Comapaq SmartArray driver indrivers/block/cciss.c). For the SCSI part, I found it inscsi_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