Commit c8daa92d authored by David Mosberger's avatar David Mosberger

ia64: Turn BIO-level virtual merging off again, so we can turn I/O MMU

	bypassing on again, which is more beneficial, performance-wise.
parent 3a883dd4
...@@ -48,9 +48,11 @@ ...@@ -48,9 +48,11 @@
** This option allows cards capable of 64bit DMA to bypass the IOMMU. If ** This option allows cards capable of 64bit DMA to bypass the IOMMU. If
** not defined, all DMA will be 32bit and go through the TLB. ** not defined, all DMA will be 32bit and go through the TLB.
** There's potentially a conflict in the bio merge code with us ** There's potentially a conflict in the bio merge code with us
** advertising an iommu, but then bypassing it. Disabled for now. ** advertising an iommu, but then bypassing it. Since I/O MMU bypassing
** appears to give more performance than bio-level virtual merging, we'll
** do the former for now.
*/ */
#undef ALLOW_IOV_BYPASS #define ALLOW_IOV_BYPASS
/* /*
** If a device prefetches beyond the end of a valid pdir entry, it will cause ** If a device prefetches beyond the end of a valid pdir entry, it will cause
......
...@@ -413,6 +413,16 @@ extern void __ia64_memset_c_io (unsigned long, unsigned long, long); ...@@ -413,6 +413,16 @@ extern void __ia64_memset_c_io (unsigned long, unsigned long, long);
# endif /* __KERNEL__ */ # endif /* __KERNEL__ */
/*
* Enabling BIO_VMERGE_BOUNDARY forces us to turn off I/O MMU bypassing. It is said that
* BIO-level virtual merging can give up to 4% performance boost (not verified for ia64).
* On the other hand, we know that I/O MMU bypassing gives ~8% performance improvement on
* SPECweb-like workloads on zx1-based machines. Thus, for now we favor I/O MMU bypassing
* over BIO-level virtual merging.
*/
#if 1
#define BIO_VMERGE_BOUNDARY 0
#else
/* /*
* It makes no sense at all to have this BIO_VMERGE_BOUNDARY macro here. Should be * It makes no sense at all to have this BIO_VMERGE_BOUNDARY macro here. Should be
* replaced by dma_merge_mask() or something of that sort. Note: the only way * replaced by dma_merge_mask() or something of that sort. Note: the only way
...@@ -425,5 +435,6 @@ extern void __ia64_memset_c_io (unsigned long, unsigned long, long); ...@@ -425,5 +435,6 @@ extern void __ia64_memset_c_io (unsigned long, unsigned long, long);
*/ */
extern unsigned long ia64_max_iommu_merge_mask; extern unsigned long ia64_max_iommu_merge_mask;
#define BIO_VMERGE_BOUNDARY (ia64_max_iommu_merge_mask + 1) #define BIO_VMERGE_BOUNDARY (ia64_max_iommu_merge_mask + 1)
#endif
#endif /* _ASM_IA64_IO_H */ #endif /* _ASM_IA64_IO_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment