Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
831d83a5
Commit
831d83a5
authored
Jul 04, 2024
by
Niklas Cassel
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'libata/for-6.10-fixes' into for-6.11
Pull in bug fixes.
parents
816be86c
eeb25a09
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
61 additions
and
30 deletions
+61
-30
drivers/ata/ahci.c
drivers/ata/ahci.c
+20
-6
drivers/ata/libata-core.c
drivers/ata/libata-core.c
+26
-13
drivers/ata/libata-scsi.c
drivers/ata/libata-scsi.c
+4
-4
drivers/ata/pata_macio.c
drivers/ata/pata_macio.c
+6
-3
drivers/scsi/libsas/sas_ata.c
drivers/scsi/libsas/sas_ata.c
+3
-3
drivers/scsi/libsas/sas_discover.c
drivers/scsi/libsas/sas_discover.c
+1
-1
include/linux/libata.h
include/linux/libata.h
+1
-0
No files found.
drivers/ata/ahci.c
View file @
831d83a5
...
...
@@ -429,7 +429,6 @@ static const struct pci_device_id ahci_pci_tbl[] = {
{
PCI_VDEVICE
(
INTEL
,
0x02d7
),
board_ahci_pcs_quirk
},
/* Comet Lake PCH RAID */
/* Elkhart Lake IDs 0x4b60 & 0x4b62 https://sata-io.org/product/8803 not tested yet */
{
PCI_VDEVICE
(
INTEL
,
0x4b63
),
board_ahci_pcs_quirk
},
/* Elkhart Lake AHCI */
{
PCI_VDEVICE
(
INTEL
,
0x7ae2
),
board_ahci_pcs_quirk
},
/* Alder Lake-P AHCI */
/* JMicron 360/1/3/5/6, match class to avoid IDE function */
{
PCI_VENDOR_ID_JMICRON
,
PCI_ANY_ID
,
PCI_ANY_ID
,
PCI_ANY_ID
,
...
...
@@ -1736,6 +1735,14 @@ static void ahci_update_initial_lpm_policy(struct ata_port *ap)
if
(
ap
->
pflags
&
ATA_PFLAG_EXTERNAL
)
return
;
/* If no LPM states are supported by the HBA, do not bother with LPM */
if
((
ap
->
host
->
flags
&
ATA_HOST_NO_PART
)
&&
(
ap
->
host
->
flags
&
ATA_HOST_NO_SSC
)
&&
(
ap
->
host
->
flags
&
ATA_HOST_NO_DEVSLP
))
{
ata_port_dbg
(
ap
,
"no LPM states supported, not enabling LPM
\n
"
);
return
;
}
/* user modified policy via module param */
if
(
mobile_lpm_policy
!=
-
1
)
{
policy
=
mobile_lpm_policy
;
...
...
@@ -1968,8 +1975,10 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
n_ports
=
max
(
ahci_nr_ports
(
hpriv
->
cap
),
fls
(
hpriv
->
port_map
));
host
=
ata_host_alloc_pinfo
(
&
pdev
->
dev
,
ppi
,
n_ports
);
if
(
!
host
)
return
-
ENOMEM
;
if
(
!
host
)
{
rc
=
-
ENOMEM
;
goto
err_rm_sysfs_file
;
}
host
->
private_data
=
hpriv
;
if
(
ahci_init_msi
(
pdev
,
n_ports
,
hpriv
)
<
0
)
{
...
...
@@ -2024,11 +2033,11 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
/* initialize adapter */
rc
=
ahci_configure_dma_masks
(
pdev
,
hpriv
);
if
(
rc
)
return
rc
;
goto
err_rm_sysfs_file
;
rc
=
ahci_pci_reset_controller
(
host
);
if
(
rc
)
return
rc
;
goto
err_rm_sysfs_file
;
ahci_pci_init_controller
(
host
);
ahci_pci_print_info
(
host
);
...
...
@@ -2037,10 +2046,15 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
rc
=
ahci_host_activate
(
host
,
&
ahci_sht
);
if
(
rc
)
return
rc
;
goto
err_rm_sysfs_file
;
pm_runtime_put_noidle
(
&
pdev
->
dev
);
return
0
;
err_rm_sysfs_file:
sysfs_remove_file_from_group
(
&
pdev
->
dev
.
kobj
,
&
dev_attr_remapped_nvme
.
attr
,
NULL
);
return
rc
;
}
static
void
ahci_shutdown_one
(
struct
pci_dev
*
pdev
)
...
...
drivers/ata/libata-core.c
View file @
831d83a5
...
...
@@ -4136,8 +4136,8 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
{
"PIONEER BD-RW BDR-207M"
,
NULL
,
ATA_HORKAGE_NOLPM
},
{
"PIONEER BD-RW BDR-205"
,
NULL
,
ATA_HORKAGE_NOLPM
},
/* Crucial
BX100 SSD 500GB has
broken LPM support */
{
"CT
500BX1
00SSD1"
,
NULL
,
ATA_HORKAGE_NOLPM
},
/* Crucial
devices with
broken LPM support */
{
"CT
*0BX*
00SSD1"
,
NULL
,
ATA_HORKAGE_NOLPM
},
/* 512GB MX100 with MU01 firmware has both queued TRIM and LPM issues */
{
"Crucial_CT512MX100*"
,
"MU01"
,
ATA_HORKAGE_NO_NCQ_TRIM
|
...
...
@@ -4155,6 +4155,12 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
ATA_HORKAGE_ZERO_AFTER_TRIM
|
ATA_HORKAGE_NOLPM
},
/* AMD Radeon devices with broken LPM support */
{
"R3SL240G"
,
NULL
,
ATA_HORKAGE_NOLPM
},
/* Apacer models with LPM issues */
{
"Apacer AS340*"
,
NULL
,
ATA_HORKAGE_NOLPM
},
/* These specific Samsung models/firmware-revs do not handle LPM well */
{
"SAMSUNG MZMPC128HBFU-000MV"
,
"CXM14M1Q"
,
ATA_HORKAGE_NOLPM
},
{
"SAMSUNG SSD PM830 mSATA *"
,
"CXM13D1Q"
,
ATA_HORKAGE_NOLPM
},
...
...
@@ -5491,6 +5497,18 @@ struct ata_port *ata_port_alloc(struct ata_host *host)
return
ap
;
}
void
ata_port_free
(
struct
ata_port
*
ap
)
{
if
(
!
ap
)
return
;
kfree
(
ap
->
pmp_link
);
kfree
(
ap
->
slave_link
);
kfree
(
ap
->
ncq_sense_buf
);
kfree
(
ap
);
}
EXPORT_SYMBOL_GPL
(
ata_port_free
);
static
void
ata_devres_release
(
struct
device
*
gendev
,
void
*
res
)
{
struct
ata_host
*
host
=
dev_get_drvdata
(
gendev
);
...
...
@@ -5517,12 +5535,7 @@ static void ata_host_release(struct kref *kref)
int
i
;
for
(
i
=
0
;
i
<
host
->
n_ports
;
i
++
)
{
struct
ata_port
*
ap
=
host
->
ports
[
i
];
kfree
(
ap
->
pmp_link
);
kfree
(
ap
->
slave_link
);
kfree
(
ap
->
ncq_sense_buf
);
kfree
(
ap
);
ata_port_free
(
host
->
ports
[
i
]);
host
->
ports
[
i
]
=
NULL
;
}
kfree
(
host
);
...
...
@@ -5572,8 +5585,10 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports)
if
(
!
host
)
return
NULL
;
if
(
!
devres_open_group
(
dev
,
NULL
,
GFP_KERNEL
))
goto
err_free
;
if
(
!
devres_open_group
(
dev
,
NULL
,
GFP_KERNEL
))
{
kfree
(
host
);
return
NULL
;
}
dr
=
devres_alloc
(
ata_devres_release
,
0
,
GFP_KERNEL
);
if
(
!
dr
)
...
...
@@ -5605,8 +5620,6 @@ struct ata_host *ata_host_alloc(struct device *dev, int max_ports)
err_out:
devres_release_group
(
dev
,
NULL
);
err_free:
kfree
(
host
);
return
NULL
;
}
EXPORT_SYMBOL_GPL
(
ata_host_alloc
);
...
...
@@ -5905,7 +5918,7 @@ int ata_host_register(struct ata_host *host, const struct scsi_host_template *sh
* allocation time.
*/
for
(
i
=
host
->
n_ports
;
host
->
ports
[
i
];
i
++
)
k
free
(
host
->
ports
[
i
]);
ata_port_
free
(
host
->
ports
[
i
]);
/* give ports names and add SCSI hosts */
for
(
i
=
0
;
i
<
host
->
n_ports
;
i
++
)
{
...
...
drivers/ata/libata-scsi.c
View file @
831d83a5
...
...
@@ -1864,11 +1864,11 @@ static unsigned int ata_scsiop_inq_std(struct ata_scsi_args *args, u8 *rbuf)
2
};
/* set scsi removable (RMB) bit per ata bit, or if the
* AHCI port says it's external (Hotplug-capable, eSATA).
/*
* Set the SCSI Removable Media Bit (RMB) if the ATA removable media
* device bit (obsolete since ATA-8 ACS) is set.
*/
if
(
ata_id_removable
(
args
->
id
)
||
(
args
->
dev
->
link
->
ap
->
pflags
&
ATA_PFLAG_EXTERNAL
))
if
(
ata_id_removable
(
args
->
id
))
hdr
[
1
]
|=
(
1
<<
7
);
if
(
args
->
dev
->
class
==
ATA_DEV_ZAC
)
{
...
...
drivers/ata/pata_macio.c
View file @
831d83a5
...
...
@@ -915,10 +915,13 @@ static const struct scsi_host_template pata_macio_sht = {
.
sg_tablesize
=
MAX_DCMDS
,
/* We may not need that strict one */
.
dma_boundary
=
ATA_DMA_BOUNDARY
,
/* Not sure what the real max is but we know it's less than 64K, let's
* use 64K minus 256
/*
* The SCSI core requires the segment size to cover at least a page, so
* for 64K page size kernels this must be at least 64K. However the
* hardware can't handle 64K, so pata_macio_qc_prep() will split large
* requests.
*/
.
max_segment_size
=
MAX_DBDMA_SEG
,
.
max_segment_size
=
SZ_64K
,
.
device_configure
=
pata_macio_device_configure
,
.
sdev_groups
=
ata_common_sdev_groups
,
.
can_queue
=
ATA_DEF_QUEUE
,
...
...
drivers/scsi/libsas/sas_ata.c
View file @
831d83a5
...
...
@@ -610,15 +610,15 @@ int sas_ata_init(struct domain_device *found_dev)
rc
=
ata_sas_tport_add
(
ata_host
->
dev
,
ap
);
if
(
rc
)
goto
destroy
_port
;
goto
free
_port
;
found_dev
->
sata_dev
.
ata_host
=
ata_host
;
found_dev
->
sata_dev
.
ap
=
ap
;
return
0
;
destroy
_port:
k
free
(
ap
);
free
_port:
ata_port_
free
(
ap
);
free_host:
ata_host_put
(
ata_host
);
return
rc
;
...
...
drivers/scsi/libsas/sas_discover.c
View file @
831d83a5
...
...
@@ -301,7 +301,7 @@ void sas_free_device(struct kref *kref)
if
(
dev_is_sata
(
dev
)
&&
dev
->
sata_dev
.
ap
)
{
ata_sas_tport_delete
(
dev
->
sata_dev
.
ap
);
k
free
(
dev
->
sata_dev
.
ap
);
ata_port_
free
(
dev
->
sata_dev
.
ap
);
ata_host_put
(
dev
->
sata_dev
.
ata_host
);
dev
->
sata_dev
.
ata_host
=
NULL
;
dev
->
sata_dev
.
ap
=
NULL
;
...
...
include/linux/libata.h
View file @
831d83a5
...
...
@@ -1249,6 +1249,7 @@ extern int ata_slave_link_init(struct ata_port *ap);
extern
struct
ata_port
*
ata_sas_port_alloc
(
struct
ata_host
*
,
struct
ata_port_info
*
,
struct
Scsi_Host
*
);
extern
void
ata_port_probe
(
struct
ata_port
*
ap
);
extern
void
ata_port_free
(
struct
ata_port
*
ap
);
extern
int
ata_sas_tport_add
(
struct
device
*
parent
,
struct
ata_port
*
ap
);
extern
void
ata_sas_tport_delete
(
struct
ata_port
*
ap
);
int
ata_sas_device_configure
(
struct
scsi_device
*
sdev
,
struct
queue_limits
*
lim
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment