| .. | .. |
|---|
| 279 | 279 | int __init fsverity_init_workqueue(void) |
|---|
| 280 | 280 | { |
|---|
| 281 | 281 | /* |
|---|
| 282 | | - * Use an unbound workqueue to allow bios to be verified in parallel |
|---|
| 283 | | - * even when they happen to complete on the same CPU. This sacrifices |
|---|
| 284 | | - * locality, but it's worthwhile since hashing is CPU-intensive. |
|---|
| 282 | + * Use a high-priority workqueue to prioritize verification work, which |
|---|
| 283 | + * blocks reads from completing, over regular application tasks. |
|---|
| 285 | 284 | * |
|---|
| 286 | | - * Also use a high-priority workqueue to prioritize verification work, |
|---|
| 287 | | - * which blocks reads from completing, over regular application tasks. |
|---|
| 285 | + * For performance reasons, don't use an unbound workqueue. Using an |
|---|
| 286 | + * unbound workqueue for crypto operations causes excessive scheduler |
|---|
| 287 | + * latency on ARM64. |
|---|
| 288 | 288 | */ |
|---|
| 289 | 289 | fsverity_read_workqueue = alloc_workqueue("fsverity_read_queue", |
|---|
| 290 | | - WQ_UNBOUND | WQ_HIGHPRI, |
|---|
| 290 | + WQ_HIGHPRI, |
|---|
| 291 | 291 | num_online_cpus()); |
|---|
| 292 | 292 | if (!fsverity_read_workqueue) |
|---|
| 293 | 293 | return -ENOMEM; |
|---|